[c言語]再帰関数でフィボナッチ数を求めてみよう!

C言語

前回は階乗値を求めましたが、今回はフィボナッチ数を求めます。

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
*/

関係ないことですが、メイン文の行数が全然ないですね。笑笑

処理の流れは前回のを参考にしていただければ、いいなと思います。

コメント

タイトルとURLをコピーしました