• ベストアンサー

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)); } 正しソースコードを教えてください! よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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; }

blizzardoo
質問者

お礼

ありがとうございます!!

その他の回答 (4)

  • ESE_SE
  • ベストアンサー率34% (157/458)
回答No.4

なんか日本語に指摘が入っていますがw フィボナッチ数列でしょうか?ならばそうと最初から書けば・・・。 ループを追い掛けていきましょう。 ループで走らせる関数の中で、想定していない数字があるはずです。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

>ソースコードを書くと、エラーがでた。 ソースコードを書いただけでエラーが出たのですか? コンパイルはしてみなかったのですか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

関数 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)
回答No.1

正しいソースコード以前に、 問題の答えが出ていません。 つまり答えになっていない、です。 正しいソースコードとは、 正しい答え&正しいコーディングです。 少なくとも答えは出しましょう。

関連するQ&A

専門家に質問してみよう