マンガでよめる痔のこと・薬のこと

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657... という数列(フィボナ数列)を再帰処理でだしたいのですが・・・・・

include <stdio.h>

int function( int );

int main( void ){
int n;
do {
printf( "0 以上の整数値を入力して下さい→ " );
scanf( "%d", &n );
}while ( n < 0 );

printf( "計算結果: %d\n", function( n ) );


getchar();
getchar();
return 0;

}

int function( int n ){
//フィボナの処理(function)の再帰呼び出しによる
}

function内に再帰処理を用いてprintf( "計算結果: %d\n", function( n ) );で画面出力したいのですが・・・・・・。

A 回答 (4件)

お望みどおりかどうかはわかりませんが、


一応の結果を得ることができるはずです。

#include <stdio.h>

int fib(int n)
{
  if (n == 1 || n == 2)
    return 1;
  else
    return fib(n-1) + fib(n-2);
}

int main(void)
{
  int n, i;
  
  do {
    printf("フィボナッチ数の何項めまで出力しますか? > ");
    scanf("%d", &n);
  } while (n <= 0);
  
  for (i = 1; i <= n; i++)
    printf("%d ", fib(i));
  return 0;
}

(注)インデントのため、全角空白を使っています。
    • good
    • 0

Fibonacci 数列を再帰で計算するのは, やめた方がいいと思うけどなぁ. まあ, そう言われたならしょうがないけど.


さておき, 「Fibonacci 数列の最初の n項を表示する」のは, その形だと無理だと思います. どこで表示するか, 考えましたか?
    • good
    • 0

> printf( "0 以上の整数値を入力して下さい→ " );


> scanf( "%d", &n );

ここで入力している n の意味合いは何でしょうか?
例えば、10 を与えると、フィボナッチ数の最初の10項
1 1 2 3 5 8 13 21 34 55
を出力する、ということでしょうか?
    • good
    • 0

フィボナッチ数(Fibonacci Number)ですね。


ググってみると、漸化式がわかります。
漸化式がわかれば、再帰呼び出しによる実装ができます。

この回答への補足

#include <stdio.h>

int function(int);

int main( void )
{
int n;
do {
printf( "0 以上の整数値を入力して下さい: " );
scanf( "%d", &n );
}while ( n < 0 );

printf( "計算結果: %d\n", function( n ) );

getchar();
getchar();
return(0);
}
int function(int n){
if(n <= 0)
return 1;
else
return n + function(n-1);
}
ということでしょうか??なんかちがう?????

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

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


人気Q&Aランキング