例如:序執行的遞歸斐波那契方法
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)
啓動或究竟如何,我是相當新的遞歸和能似乎並沒有把我的頭圍繞着它的工作方式。
幫助讚賞。
例如:序執行的遞歸斐波那契方法
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)
啓動或究竟如何,我是相當新的遞歸和能似乎並沒有把我的頭圍繞着它的工作方式。
幫助讚賞。
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(猜測)時,它會變得非常慢。
我想我現在得到它,非常感謝 –
嗯,這種假定語言是嚴格的,並遵循一個定義的從左到右的執行策略。 – Marcin
首先,遞歸調用將被執行(依賴於編程語言的順序),然後將它們的結果相加在一起。
執行'fibb(n-1)+ fibb(n-2)'的順序實際上與遞歸無關。你可以有兩個函數'a'和'b'並且詢問'a()+ b()'。 –
是的,這似乎是正確的一個n = 3第一次遞歸調用將是fibb(2)+ fibb(1)我的問題是在這一點上發生了什麼? –
查看[tree recursion](http://mitpress.mit.edu/sicp/chapter1/node13.html)示例 –