[英]how does fibonacci with recursion works
int fib(int i) {
if(i<2) {
return 1;
}
else {
return fib(i-1) + fib(i-2) ;
}
}
我不明白如何處理語句返回fib(i-1) + fib(i-2)
?
fib(i-1)
是否先處理且fib(i-2)
或同時被處理?
另外,假設fib(i-1)=3
,那么在這種情況下,如何計算fib(i-1)=3
知道這進一步被稱為fib(i-1)=2
和fib(i-1)=1
,在兩種情況下均以1
作為回報。 然后如何fib(i-1)=3
被計算基於fib(i-1)=2
和fib(i-1)=1
???
類似於以下內容:
fib(4) =
fib(3) + fib(2) =
fib(2) + fib(1) + fib(2) =
fib(1) + fib(0) + fib(1) + fib(2) =
1 + fib(0) + fib(1) + fib(2) =
1 + 1 + fib(1) + fib(2) =
2 + fib(1) + fib(2) =
2 + 1 + fib(2) =
3 + fib(2) =
3 + fib(1) + fib(0) =
3 + 1 + fib(0) =
4 + fib(0) =
4 + 1 =
5
沒有被“同時” exectued,它只是調用fib
本身多次而evaluting您的第一個電話fib(4)
每次遇到語句return fib(i-1) + fib(i-2) ;
,它必須先找出什么是fib(i-1)
,然后每次是什么fib(i-2)
。 每當我不滿足小於2的要求時,它都必須return fib(i-1) + fib(i-2) ;
的實例return fib(i-1) + fib(i-2) ;
。 然后,它首先尋找那個fib(i-1)
是什么,然后尋找那個fib(i-2)
。 如果fib(i-1)
是導致它轉到else語句的另一個實例的原因,則意味着它將先查找第二個fib(i-1)
,然后查找第二個fib(i-2)
然后再查找第一fib(i-2)
由於需要那些第二部分,以確定哪些第一fib(i-1)
是。 只要不滿足if語句要求,它將繼續與else語句一起走得更遠。 一次,它從if語句獲得第一個1,然后它將能夠開始填充先前遇到的fib(i-1)
和fib(i-2)
的所有值,直到返回到第一個fib(i-1)
。 只有這樣,它才能繼續前進到第一個fib(i-2)
並按需要下降到該位置,然后再輸入這些1,然后將它們加起來以找到第一個return fib(i-1) + fib(i-2) ;
是。 如果這只會使事情變得更加混亂,我建議使用箭頭將其寫出來,以顯示正在采取的步驟,這樣您就可以清楚地知道自己的位置以及所做的一切。 這樣做對我第一次學習Fibonacci遞歸時有幫助。
fib(4) = fib(3) + fib(2)
fib(2) + fib(1) + fib(1) + fib(0)
fib(1) + fib(0) + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 = 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.