2016-07-26 4 views
-1

フィボナッチシーケンスを計算するアルゴリズムをオンラインで見つけました。私は愚か者のように少し感じますが、私はそれがどのように動作するのか分かりません!フィボナッチシーケンスを理解する

def fib(n) 

    if n == 0 || n == 1 
    return n 
    end 

    if n >= 2 
    return fib(n-1) + fib(n-2) 
    end 
end 

引数が10のメソッドを呼び出すと、なぜ18を返しませんか?私はここでいくつかの再帰が起こっていると仮定しますが、私は分かりません。誰かが私にこれを理解させるのを助けることができるか

+3

10で電話すると何が返されますか?なぜあなたは18を望んでいますか? 10番目のフィボナッチ数は55です。 – Thilo

+0

はいそれは再帰です。 [here](http://www.theodinproject.com/ruby-programming/recursion)は、再帰フィボナッチをカバーする良いチュートリアルです –

+0

18はフィボナッチ数ではないかもしれませんか?投稿したコードが正しいようです。 – axiac

答えて

3

のは、上記のコードによると、fib(4)を見てみましょう:

fib(4) #=> 3 

それはとても以下の結果使用しない:

fib(4) #calculates fib(3) + fib(2) 
fib(3) #calculates fib(2) + fib(1) 
fib(2) #calculates fib(1) + fib(0) 
fib(1) #returns 1 
fib(0) #returns 0 

ぞんざいにあなたの方法を話すことは、以下の方法で上記の結果を使用しています (注:上記の結果で置き換えられるビットを説明するために、の数値表記といくつかの疑わしい間隔を使用しています):

# fib(4) = fib(3)      + fib(2) 
#  = (fib(2)   + fib(1)) + (fib(1) + fib(0)) 
#  = ((fib(1) + fib(0)) + 1 ) + (1  + 0 ) 
#  = ((1  + 0 ) + 1 ) + 1 
#  = (1     + 1 ) + 1 
#  = 2       + 1 
#  = 3 

アルゴリズムは上記の手順を実行します。 fib(10)の場合も同様ですが、非常に扱いにくい可能性があるため、手動で処理する価値はほとんどありません。あなたが基本的なアイデアを得る限り、上に移動します。そしてあなたが馬鹿ではない方法で、あなたは私たちの多くがやろうとしていることをより良くしようとしているだけです。がんばろう。