2016-06-09 51 views
-2

是什麼以下兩種方法之間的區別:Java的遞歸方法差異

public boolean recursionMethodOne(Node n) { 
    System.out.println(n.getValue()); 
    return recursionMethodOne(n.next()); 
} 

public void recursionMethodTwo(Node n) { 
    System.out.println(n.getValue()); 
    recursionMethodTwo(n.next()); 
} 

你使用遞歸哪一個和的區別是什麼?

謝謝

+2

沒有結束。 –

+1

我們是否從測試中獲得現場問題?對不起,但區別很明顯:兩者都將(很可能)不起作用。 – pintxo

+0

那麼我想知道的主要事情是什麼時候在遞歸方法中返回''什麼時候你只是調用方法的名字而不返回? – Kingamere

回答

2

這兩個代碼都不存在。您需要爲測試條件添加返回。例如:

public void recursionMethodTwo(Node n) { 
    if (n == null) { 
     // Standard way to exit a void function without executing remaing code 
     // note that return null; doesn't compile 
     return; 
    } 
    System.out.println(n.getValue()); 
    recursionMethodTwo(n.next()); 
} 

返回值與否取決於函數的種類。 例如,如果你需要計算一個階乘,你需要一個結果,如果你需要打印一個列表,你不需要。

因此,對於您的示例,似乎方法二最接近您的需求。

否則你需要問自己什麼是函數的返回布爾值?如果你對這個問題有一個很好的答案,你可以實現代碼返回一個值。

+0

如何在無效方法中返回? – Kingamere

+2

@Kingamere使用'return;'。請注意'return'和';'之間沒有表達式。 –

+2

@kingamere'return;'是從返回'void'的函數立即退出的標準方式。 –