2013-05-29 40 views
2

我似乎有點卡在真正掌握遞歸,所以我可以使用它們。Java - 這個遞歸的操作順序是什麼?

這是我在教程中找到的示例。

我想驗證一下,看看我是否正確理解這一點。

public class SolveRecursion { 



public void recursionPerform(){ 

System.out.println(fact(4)); 


} 
public static long fact(long n){ 

    if (n <= 1){ 
     return n; 
    } 
    else{ 
     return n * fact(n-1); 
    } 

} 
} 

讓我們將n設置爲4

在這種情況下,這是什麼情況? (很抱歉的混亂格式,我盡力了)

(是N(4)< = 1,否),否則,N(4)*(爲(n-1 = 3)< = 1否),否則,n(3)*(Is(n-1 = 2)< = 1,否),否則*(Is(n-1 < = 1),是)* n(1)

+3

你可以在調試器中運行它,或添加打印語句,然後你可以看到操作的順序爲自己。 –

+0

謝謝,我試過打印報表,讓事情看起來更容易一些。 – LearnIT

回答

11

這裏的操作順序:

n = 4 
Is 4 <= 1? No 
4 * fact(3) 
    n = 3 
    Is 3 <= 1? No 
4 * 3 * fact(2) 
     n = 2 
     Is 2 <= 1? No 
4 * 3 * 2 * fact(1) 
      n = 1 
      Is 1 <= 1? Yes, return 1. // Base Case 
4 * 3 * 2 * 1 
24 
+0

現在有了很多意義,我認爲我在腦海中過度複雜。它比我原先想象的更線性。 謝謝。 – LearnIT