解答例
c言語
1#include <stdio.h> 2int fibo(int n); 3int main(void) 4{ 5 int i, no; 6 printf("初項から第何項のフィボナッチ数を求めますか?:"); 7 scanf("%d", &no); 8 for(i=0; i<no; i++) 9 { 10 printf("%d\n", fibo(i)); 11 } 12 return 0; 13} 14 15int fibo(int n) 16{ 17 if(n == 0 || n == 1) 18 return 1; 19 return fibo(n-1) + fibo(n-2); 20} 21```### 前提・実現したいこと 22 23c言語で初項から第n項までのフィボナッチ数列を作成したいのですが、第n項の数値しか表示されません。 24### 発生している問題・エラーメッセージ 25
再帰するごとに数値を表示することができません。
### 該当のソースコード ```c言語 #include <stdio.h> int fibo(int n); int main(void) { int n; printf("初項から第何項までのフィボナッチ数を求めますか?:"); scanf( "%d", &n ); printf( "%d\n", fibo(n) ); return 0; } int fibo(int n) { if(n==0) return 0; if(n==1) return 1; if(n>=2) return fibo(n-1)+fibo(n-2); }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> 再帰するごとに数値を表示することができません。
現状のコードではそうならないのはわかったとして、どのように手を入れようとしましたか?
printf( "%d\n", fibo(n) );の部分を変えて再帰毎に表示しようとしました。
どうしてそれで再帰毎の表示になると考えましたか?
要するに、もちろん解答となるコードを与えることは出来るのですが説明すべきことが何であるのかわからないというのが回答者側の状況です。
文章が拙くて申し訳ありません。
> 文章が拙くて申し訳ありません。
文章が拙いのは構いません。(できればちゃんとした方がいいが、他人に言えない……)
えーっと、失礼ですが、質問にあるコードって、ご自身で考えて書いたのでしょうか。
それとも『どこからか持ってきたもの』でしょうか。
前者、つまり『自分で考えたもの』であれば、『どういうロジックなのか』を説明してほしいです。
もしかしたら勘違いなさっているかもしれませんし、
惜しいところまで来ていているのかもしれません。
後者、つまり『どこからかのコピペ』(手打ちであっても)であれば、『基礎からやり直しましょう』となります。
後者であれば理解せずに書いているはずなので。
つまり、『なぜこのコードになったのか』とかを説明してほしいのです。
(意外とコピペでつぎはぎだらけでも『動くからいいや』と「俺はプログラミングができる」と豪語している人が多いので)
コードは自分で作成しましたが、再帰の動作の認識を誤っていたためprintf( "%d\n", fibo(n) );と入力しました。しかし、初項から第n項までのフィボナッチ数列を表示する方法が思いつかず、ソースコードでは一応動作させるためにそのようになりました。初項から第n項までのフィボナッチ数列を表示する方法をご存じでしたらご教授ください。
(追記された「解答例」では初項の値が1になってませんか? ←→ 元々のコードでは fibo(0)の値は0になるハズ)
コードを読みやすくするために解答例では初項の値を1にしました。初項の値が0か1かによって数列自体に影響はないので問題ないと思います。
影響ないはずがないでしょう。
実際に両方動かしてみれば違うことがわかります。
回答6件
あなたの回答
tips
プレビュー