n番目のフィボナッチ数を再帰関数によって計算したいです。再帰が無限になってしまいます。改善点お願いします。 clc;clear; prompt = '整数nを入力してください';
n番目のフィボナッチ数を再帰関数によって計算したいです。再帰が無限になってしまいます。改善点お願いします。 clc;clear; prompt = '整数nを入力してください'; n = input(prompt); N = my_fibonacci(n); fprintf('n番目のフィボナッチ数は%d \n',N); function N = my_fibonacci(n) if n==0 N = 0; else N=my_fibonacci(n-1)+my_fibonacci(n); end end
ベストアンサー
フィボナッチ数は f(n) = f(n-2) + f(n-1) なので 下でたろうさんが指摘している通り N=my_fibonacci(n-2)+my_fibonacci(n-1); にする必要があります。 この場合、my_fibonacci(1)のときの計算が my_fibonacci(-1)+my_fibonacci(0) となり nがマイナスになります。 このため終了条件は n==0 ではなく n<=0 にしましょう。 また、これだけですとNは常に0になってしまいますので my_fibonacci(1)のときに1を返すようにする必要があります。 言語が不明ですがだいたいこんな感じになります。 if n<=0 N = 0; elseif n==1 N = 1; else N=my_fibonacci(n-2)+my_fibonacci(n-1);
質問者からのお礼コメント
一歩手前でした。ようやくたどり着けました。 ありがとうございます。
お礼日時:5/17 11:18