- ベストアンサー
C言語ソースコードに関する質問です。
以下の数列について,初項から第15項までを求めるプログラムと実行結果を示せ。 0 1 1 2 3 5 8 13 21(ただし,初項=0,第1項=1とする。) ソースコードを書くと、エラーがでた。 #include <stdio.h> int fib(int n) { if(n==1 || n==2) return 1; else return fib(n-1)+fib(n-2); } int main(void) { int n; for(n=0;n<17;n++) printf("%d,",fib(n)); } 正しソースコードを教えてください! よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> void fib(int i, int j, int n) { if (n == 1) { printf("%d\n", i); } else { printf("%d\n", i); return fib(j, i + j, n - 1); } } int main(void) { fib(0, 1, 15); return 0; }
その他の回答 (4)
- ESE_SE
- ベストアンサー率34% (157/458)
なんか日本語に指摘が入っていますがw フィボナッチ数列でしょうか?ならばそうと最初から書けば・・・。 ループを追い掛けていきましょう。 ループで走らせる関数の中で、想定していない数字があるはずです。
- asuncion
- ベストアンサー率33% (2127/6289)
>ソースコードを書くと、エラーがでた。 ソースコードを書いただけでエラーが出たのですか? コンパイルはしてみなかったのですか?
- redfox63
- ベストアンサー率71% (1325/1856)
関数 fibの引数が 0の場合どこが実行されるのかを考えてみましょう // n ==0 なので ここは条件が成り立たない if(n==1 || n==2) return 1; else // ここにくるので 再帰呼出される // fib(-1) + fib(-2) return fib(n-1)+fib(n-2); といった具合になります fib(-1) や fib(-2) も if(n==1||n==2) の条件に合致しないので 再帰になりfib(-2) や fib(-3)、fib(-3)、fib(-4)を計算しようとします これを永遠に繰り返して最後にはスタックを食いつぶして止まるか 暴走状態に陥って パソコンなどの再起動となるかもしれません
- Tasuke22
- ベストアンサー率33% (1799/5383)
正しいソースコード以前に、 問題の答えが出ていません。 つまり答えになっていない、です。 正しいソースコードとは、 正しい答え&正しいコーディングです。 少なくとも答えは出しましょう。
お礼
ありがとうございます!!