- 締切済み
フィボナッチ数列のプログラム
問題で フィボナッチ数列のn番目の値を計算する関数 int fib(int n) を再帰的に定義し、この関数を利用してフィボナッチ数列の最初の10個を表示するプログラムを書けという問題があるのですが、大まかな流れは想像できるのですが、できないので困っております。 何方か教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・フィボナッチ数列の再帰関数は出来ましたね。 >0,1,1,2,3,5,8・・・と表示できるのかがわかりません。 ↑ こんなにきれいには表示できないと思います。 何も printf() を入れなくてもよいのでは。 ・ちょっと試行錯誤してみましたが意外に難しいですね。 下のサンプルで我慢して。 サンプル: #include <stdio.h> // フィボナッチ数列 int fib( int n ) { if ( n == 0 ) return 0; if ( n == 1 ){printf("\n1");return 1;} n = fib(n - 1) + fib(n - 2); printf( " + %d", n ); return n; } // メイン関数 int main( void ) { // フィボナッチ数列 printf( "\nfib = %d\n", fib(9) ); return 0; }
- himajin100000
- ベストアンサー率54% (1660/3060)
アドバイス。 http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Recursive.html Cじゃないけど,Tiny Basicのプログラムを参考にしてみたらもっとわかりやすいかも? #『使うべきではない』とか書かれているのが気になるが(^^;; 宿題なら仕方ないかなあ・・・
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・フィボナッチ数列の代わりに 1 ~ n 番目までの数を加算するサンプルを載せます。 もちろん再帰的に処理する関数です。 これを参考に『フィボナッチ数列』の関数 int fib(int n) を作成して下さい。 ・それでは下にサンプルを載せておきます。 サンプル: #include <stdio.h> // 1~n 番目までを再帰処理で加算する関数 int func_sum( int n ) { if ( n > 0 ){ printf( "%d + ", n ); return n + func_sum( n - 1 ); } else{ printf( "%d\n", n ); return 0; } } // メイン関数 int main( void ) { // 1~10 までを加算 printf( "sum = %d\n", func_sum(10) ); return 0; } その他 ・動作を分かりやすくするために func_sum() 関数に printf() 関数を使っています。 実際に実行してみて動作の確認をして下さい。 表示される内容から再帰動作で 1 ~ n 番目の数の加算が分かると思います。 これを参考にして『フィボナッチ数列』の再帰関数を作ってみて下さい。 ・以上。
- asuncion
- ベストアンサー率33% (2127/6289)
> int f(0) = 0,f(1) = 1; > > f(n) = f(n - 1) + fib(n - 2); fib関数以外にf関数も登場していますね。f関数は不要です。 数列の1番目:1(固定) 2番目:1(固定) 3番目:2(1番目+2番目) 4番目:3(2番目+3番目) 5番目:5(3番目+4番目) 6番目:8(4番目+5番目) 7番目:13(5番目+6番目) 8番目:21(6番目+7番目) 9番目:34(7番目+8番目) 10番目:55(8番目+9番目) という結果を得るために、fib関数では呼び出し元に どういう値を返す必要があるか、検討してみてください。
自分の考えた「大まかな流れ」を補足してください。 このままでは、「丸投げ」で削除対象になってしまいます。
補足
int fib(int n) { int f(0) = 0,f(1) = 1; f(n) = f(n - 1) + fib(n - 2); } こんな感じで考えているんですけど。よろしくお願いします。
補足
こんな感じで作ってみたんですけど、何処にprintf()を入れれば 0,1,1,2,3,5,8・・・と表示できるのかがわかりません。 よろしくお願いいたします。 #include <stdio.h> int fib(int); main() { printf("fib = %d\n", fib(10)); } int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; return fib(n - 1) + fib(n - 2); }