2017-01-15 1 views
0

私はPHPを使用してフィボナッチシーケンスで遊んでいます。私は再帰関数の概念を理解していますが、ここで何が起こっているのか分かりません。コードフィボナッチシーケンスリターン

:入力は1を返します1よりも小さい場合

n is 3 
n is 2 
n is 1 
2 when n is 1 
1 when n is 2 
n is 1 
2 when n is 1 
0 when n is 3 
+0

あなたは正確に何を理解していませんか?あなたが持っているものは、フィボナッチ数を計算する関数です。フィボナッチ数列を理解していないのですか、あるいはその出力を理解できませんか? – Pavlin

+0

私はフィボナッチを理解していますが、出力を理解していません。 "n is 3"、 "n is 2"、 "n is 1" - なぜ次の出力は "nが1のとき2"ですか?私が理解していないコードの実行順序です。前もって感謝します – MadeCurler

答えて

0

あなたfunction、それ以外の場合は、入力の値を印刷します:ここ

function fs($n) { 
    if ($n < 1) { 
     return 1; 
    } // if 

    echo " n is " . $n . "<br>"; 
    echo fs($n - 1) + fs($n - 2) . " when n is " . $n . "<br>"; 
} // function 

echo fs(3); 

とリターンですより低い値のために関数を再帰的に呼び出します。 -1の場合は1が返されるため、間違った値が返されます。それを1で呼びましょう。それは0と-1のためにそれを呼び出すでしょう、それぞれのために1を返し、それらを追加します、結果は2です。これは間違っています。別の方法で実装する必要があります。

function fs($n){ 

    if ($n<=1) { 
     return 1; 
    } 
    echo fs($n-1)+fs($n-2) ." when n is ".$n. "<br>"; 

    } //function 

    fs(3); 

これで問題は解決します。