- ベストアンサー
C言語で分からない点があるのですが……
- C言語を学んでいて、フィボナッチ数列のプログラムで困っています。ユーザから数字を受け取り、その項までの数字を表示するプログラムです。しかし、実行結果が期待通りにならず、途中の項が欠落されています。どうすればいいのでしょうか?
- C言語でのフィボナッチ数列のプログラムで困っています。ユーザから受け取った数字までの項を表示するプログラムですが、実行結果が正しくありません。途中の項が欠落しています。どの部分が間違っているのか、ご助力いただけると幸いです。
- C言語のプログラムでフィボナッチ数列を表示する際に問題が発生しています。ユーザから受け取った数字までの項を表示するプログラムですが、途中の項が欠落してしまいます。どのように修正すれば正しく表示できるのか、アドバイスをいただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
出力ループをiでまわしているのに fibに渡しているのが上限のnになっています >_< 置き換えたら、動作しましたよ。 /*元コード*/ for(i=2; i<=n; i++){ printf("F%d = %d\n", n, fib(n));<----- この行 } /*修正後*/ for(i=2; i<=n; i++){ printf("F%d = %d\n", i, fib(i));<----- iに置き換える } /* 動作結果 */ input number: 8 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21
その他の回答 (2)
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
質問は、後退減算によるフィボナッチ数列プログラムなため、for()ループ毎にその都度再帰計算を行っています。 無駄のない前進加算のフィボナッチ数列も、また良いもんですよ。 #include <stdio.h> /* printf() */ #define NOTHING 0 /* 初動はゼロ */ #define FALSE 0 /* 排他的初期値 */ #define TRUE 1 /* 〃 */ int stage; /* set global it */ int fibonacci(int, int, int); int main(void) { printf("INPUT number: "); fflush(stdout); scanf("%d",&stage); printf("Result: Fibonacci(%d)= %d\n", stage, fibonacci(NOTHING, FALSE, TRUE)); return 0; } int fibonacci(int generation, int present, int past) { if (stage == generation) return present; else { fprintf(stderr, "\t Fibonacci(%d)= %d\n", generation, present); fibonacci(generation + 1, present + past, present); } ----- 「INPUT number: 3」の出力 ----- Fibonacci(0)= 0 Fibonacci(1)= 1 Fibonacci(2)= 1 Result: Fibonacci(3)= 2
- SaKaKashi
- ベストアンサー率24% (755/3136)
>for(i=2; i<=n; i++){ >printf("F%d = %d\n",n, fib(n)); >} なぜ、iが2から? printfの中の値がnではなくiでしょ。 for ( i = 1 ; i <= n; i++ ) { printf("F%d = %d\n",i, fib(i)); }