• 締切済み

フィボナッチ数列のプログラム

問題で フィボナッチ数列のn番目の値を計算する関数 int fib(int n) を再帰的に定義し、この関数を利用してフィボナッチ数列の最初の10個を表示するプログラムを書けという問題があるのですが、大まかな流れは想像できるのですが、できないので困っております。  何方か教えてください。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★アドバイス ・フィボナッチ数列の再帰関数は出来ましたね。 >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; }

回答No.4

アドバイス。 http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Recursive.html Cじゃないけど,Tiny Basicのプログラムを参考にしてみたらもっとわかりやすいかも? #『使うべきではない』とか書かれているのが気になるが(^^;; 宿題なら仕方ないかなあ・・・

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・フィボナッチ数列の代わりに 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 番目の数の加算が分かると思います。  これを参考にして『フィボナッチ数列』の再帰関数を作ってみて下さい。 ・以上。

hiromatu4
質問者

補足

こんな感じで作ってみたんですけど、何処に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); }

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

> 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関数では呼び出し元に どういう値を返す必要があるか、検討してみてください。

noname#77845
noname#77845
回答No.1

自分の考えた「大まかな流れ」を補足してください。 このままでは、「丸投げ」で削除対象になってしまいます。

hiromatu4
質問者

補足

int fib(int n) { int f(0) = 0,f(1) = 1; f(n) = f(n - 1) + fib(n - 2); } こんな感じで考えているんですけど。よろしくお願いします。

関連するQ&A