2016-08-22 77 views
-1

這是一個關於斐波那契數列的程序。每次代碼再次分支時,您都會從內部調用斐波那契函數兩次。斐波那契 - 遞歸 - 紅寶石

def fibonacci(number) 
    if number < 2 
    number 
    else 
    fibonacci(number - 1) + fibonacci(number - 2) 
    end 
end 

puts fibonacci(6) 

我明白的唯一的事情就是它增加了前一個數字的數字。這個程序是從我的任務中拿走的。它說:「如果你把所有這些和零加入到一起,你會得到與你運行代碼時相同的答案。」

enter image description here

我真的盡我所能,以瞭解該代碼的作品,但我失敗了。任何人都可以在那裏很友善,並且以外行人的名義或以某種方式向我解釋,這將會理解此代碼上發生了什麼?

+3

這裏帶有諷刺意味的是,你的圖像比我在這個主題上討論過的大多數答案在解釋斐波那契數列上做得更好。 – Makoto

+0

你有多粗魯。 –

+2

@ Makoto的評論對我來說並不粗魯。我不認爲他說你或你的代碼有什麼不好。他在說你包含的圖像非常好。 –

回答

3

這僅僅是直接的1:

Fib(0) = 0 
Fib(1) = 1 
Fib(n) = Fib(n-2) + Fib(n-1) 

翻譯成拼音,這將成爲:1個斐波那契數函數的標準數學定義的轉換(用一個簡單的扭曲):

def fib(n) 
    return 0 if n.zero? 
    return 1 if n == 1 
    fib(n-2) + fib(n-1) 
end 

可以很容易地看到,前兩種情況可以組合:當n爲0,結果爲0,如果n爲1,則結果爲1。這等於說,如果n爲0或1,結果與n相同。而「n爲0或1」是一樣的「n小於2」:

def fib(n) 
    return n if n < 2 
    fib(n-2) + fib(n-1) 
end 

沒有什麼特別之處,它的數學斐波那契函數的遞歸定義的準確翻譯。

2

我真的不知道哪個部分讓你感到困惑,但讓我試試。在圖中,函數f()表示你的斐波那契函數f(1)和f(0)被預先定義爲1和0.
由於f(數)來自f(數 - 1)+ f(number - 2)in your number = 2,
f(2)= f(2-1)+ f(2-2)= 1 + 0 = 1 同樣,你可以得到f 3)= f(3 - 1)+ f(3 - 2)= f(2)+ f(1)= 1 + 1.您可以用代碼繼續圖6中的數字,然後得到答案。

並不在乎那些已經忘記他們是寶貝的人。這就像約定在這裏:)

+0

謝謝你將我理解爲初學者。有些人只是粗魯的,忘記他們曾經是初學者試圖探索計劃。祝一切順利。 –