前回は階乗値を求めましたが、今回はフィボナッチ数を求めます。
Fn=Fn-1+Fn-2 (n>=2) F1=1,F0=0
上記の式が求めるものになります。知っている人もいるかと思いますが、
簡単に説明すると一つ前と二つ前の和が次の値となる意味ですね。
フィボナッチ数を求めてみよう!!!
Fn=Fn-1+Fn-2 (n>=2) F1=1,F0=0
上記の式を意識して実装してみましょう。
#include <stdio.h>
int f(int n){
int x;
if(n==0){
printf("関数の引数: %d\n",n);
printf("戻り値: %d\n",0);
return 0;
}
else if(n==1){
printf("関数の引数: %d\n",n);
printf("戻り値: %d\n",1);
return 1;
}
else{
printf("関数の引数: %d\n",n);
x=f(n-1)+f(n-2);
printf("戻り値: %d\n",x);
return x;
}
}
int main(void){
int n;
printf("n: "); scanf("%d",&n);
printf("f(%d) = %d\n",n,f(n));
}
/* 実行結果
n: 5
関数の引数: 5
関数の引数: 4
関数の引数: 3
関数の引数: 2
関数の引数: 1
戻り値: 1
関数の引数: 0
戻り値: 0
戻り値: 1
関数の引数: 1
戻り値: 1
戻り値: 2
関数の引数: 2
関数の引数: 1
戻り値: 1
関数の引数: 0
戻り値: 0
戻り値: 1
戻り値: 3
関数の引数: 3
関数の引数: 2
関数の引数: 1
戻り値: 1
関数の引数: 0
戻り値: 0
戻り値: 1
関数の引数: 1
戻り値: 1
戻り値: 2
戻り値: 5
f(5) = 5
*/
関係ないことですが、メイン文の行数が全然ないですね。笑笑
処理の流れは前回のを参考にしていただければ、いいなと思います。
コメント