簡體   English   中英

斐波那契遞歸如何工作

[英]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)=2fib(i-1)=1 ,在兩種情況下均以1作為回報。 然后如何fib(i-1)=3被計算基於fib(i-1)=2fib(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM