アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (5件)

自分の考えた「大まかな流れ」を補足してください。


このままでは、「丸投げ」で削除対象になってしまいます。

この回答への補足

int fib(int n)
{

int f(0) = 0,f(1) = 1;

f(n) = f(n - 1) + fib(n - 2);

}
こんな感じで考えているんですけど。よろしくお願いします。

補足日時:2007/06/24 20:04
    • good
    • 0

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

★アドバイス


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

この回答への補足

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

補足日時:2007/06/25 22:24
    • good
    • 0

アドバイス。



http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/ …
Cじゃないけど,Tiny Basicのプログラムを参考にしてみたらもっとわかりやすいかも?

#『使うべきではない』とか書かれているのが気になるが(^^;;
宿題なら仕方ないかなあ・・・
    • good
    • 0

★アドバイス


・フィボナッチ数列の再帰関数は出来ましたね。
>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;
}
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!