2016-08-22 3 views
-1

フィボナッチシーケンスに関するプログラムです。コードが再び分岐するたびに、フィボナッチ関数を2回呼び出します。フィボナッチ - 再帰 - ルビー

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

ルビーに翻訳
Fib(0) = 0 
Fib(1) = 1 
Fib(n) = Fib(n-2) + Fib(n-1) 

、これは次のようになります。

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

それは最初の2例を組み合わせることができることを確認するのは簡単です:nが0である場合、nが1である場合、結果は、0であり、結果は、nは0又は場合言うと同じだ1です。 1の場合、結果はnと同じです。そして、「nが0または1である」「nが2未満である」と同じである。このことについて何も特別なことはありません

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

、それは数学的なフィボナッチ関数の再帰的定義の正確な翻訳です。

2

私はどの部分があなたを困惑させるのか分かりませんが、試してみましょう。

関数f()はfibonacci()を表し、f(1)とf(0)は1と0としてあらかじめ定義されています。
f(数値)はf 1)+ f(2 - 2)= 1 + 0 = 1同様に、あなたはf(1)+ f(2) 3)= f(3 - 1)+ f(3 - 2)= f(2)+ f(1)= 1 + 1.コードでグラフの番号6に進むことができます。

そして、彼らがベイビーだったときに既に忘れている人は気にしないでください。フィボナッチ関数の標準的な数学的な定義の(簡単なひねりを加えた)1翻訳:これは単なる直接の1であることは、ここにちょうど慣習のようなものです:)

+0

私を初心者として理解していただきありがとうございます。何人かの人々はちょうど失礼であり、彼らがあまりにも一度もプログラムを探索しようとしている初心者であることを忘れる。ではごきげんよう。 –