2011-07-04 24 views
2

例如:序執行的遞歸斐波那契方法

public static int fibb (int n) { 
    if(n==0||n==1) 
     return 1; 
    else{ 
     return fibb(n-1)+fibb(n-2); 
     } 
} 

如何將線fibb(n-1)+fibb(n-2)執行..喜歡將fibb(n-1)完成第一fibb(n-2)啓動或究竟如何,我是相當新的遞歸和能似乎並沒有把我的頭圍繞着它的工作方式。

幫助讚賞。

+0

執行'fibb(n-1)+ fibb(n-2)'的順​​序實際上與遞歸無關。你可以有兩個函數'a'和'b'並且詢問'a()+ b()'。 –

+0

是的,這似乎是正確的一個n = 3第一次遞歸調用將是fibb(2)+ fibb(1)我的問題是在這一點上發生了什麼? –

+1

查看[tree recursion](http://mitpress.mit.edu/sicp/chapter1/node13.html)示例 –

回答

1
fibb(3) returns fibb(2)        + fibb(1) 
       fibb(2) returns fibb(1) + fibb (0) 

so you get       1  +  1  +  1 = 3 



fibb(4) returns fibb(3) + fibb(2), we know fibb(3) returns three from above, 
fibb(2) returns fibb(1) + fibb(0) also from above, 

so fibb(4) returns 3 + 2 = 5 

重要的是要注意,在這個實現中,您必須計算兩次以前的斐波那契數。這意味着當你達到約20(猜測)時,它會變得非常慢。

+0

我想我現在得到它,非常感謝 –

+1

嗯,這種假定語言是嚴格的,並遵循一個定義的從左到右的執行策略。 – Marcin

2

首先,遞歸調用將被執行(依賴於編程語言的順序),然​​後將它們的結果相加在一起。