新しく質問する

フィボナッチ数列X(n+1)= X(n+1)+X(n) (X(1)=X

役に立った:7件
  • 質問者:ehtot
  • 投稿日時:2010/06/12 20:45
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

フィボナッチ数列X(n+1)= X(n+1)+X(n) (X(1)=X(2)=1) の1項X(1)からX(30)までの値を表示するプログラムを再帰関数を使って作る方法を教えてください。
再帰関数がよくわかりません。

この質問に回答する
このQ&Aは役に立ちましたか?(役に立った:7件)

回答(4件)

  • 参考になった:0件
  • 回答者:hiroshi09s
  • 回答日時:2010/06/13 21:17

もうひとつの回答例。これを一般のソースに直せば良い。


/* Gcc on MacOSX
* file name: fibonacci.c
* compile : gcc fibonacci.c
* execution: ./a.out <n>
*       n >= 0
* example: ./a.out 30
*/
#include <stdio.h>
#include <stdlib.h> // atoi()
int stage;
int fibonacci(int, int, int);

int main(int argc, char *argv[]) {
if (argc != 2) return 1;
stage = atoi(argv[--argc]);
printf("fibonacci(%d) = %d\n", stage, fibonacci(0, 0, 1));
return 0;
}

int fibonacci(int generation, int present, int past) {
printf("\tfibonacci(%d)= %d\n", generation, present);
return stage == generation ? present : fibonacci(++generation, present + past, present);
}

通報する

  • 参考になった:0件
  • 回答者:episteme
  • 回答日時:2010/06/13 16:24

> 再帰関数がよくわかりません。

直接または間接的に自分自身を呼び出す関数です。
例: 階乗 f(n) = n*f(n-1) ( f(0) = 1) )

int factorial(int n) {
  if ( n == 0 ) return 1;
  return n * factorial(n-1);
}

通報する

  • 参考になった:0件
  • 回答者:hiro_knigh
  • 回答日時:2010/06/13 00:10

googleで「フィボナッチ数列 c言語」で検索すると一発で出てきたっぽいけど。。。

通報する

  • 参考になった:0件
  • 回答者:koko_u_u
  • 回答日時:2010/06/12 20:55

フィボナッチ数列自体が再帰的に定義されているので、これを再帰的に呼び出すだけです。
その後、実行効率についても考察しましょう。

通報する

  
このQ&Aは役に立ちましたか?(役に立った:7件)

このページのトップへ

Facebook公式ページ

公式Twitter