函数递归法求fibonacci数列中第n项的值

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/milustarting/article/details/71250320

 求fibonacci数列第n项的值

fibonacci数列,0,1,1,2,3,5,8,13,……满足前两项之和等于第三项,则

f1 = 0,

f2 = 1,

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

程序如下;

#include <stdio.h>
int f(int a)                                                          //函数f的定义
{
        int i;
        if( a==1 ){
                return 0;
        }
        if( a== 2 ){
                return 1;
        }
        else if(a >= 3){
                for(i = 1 ; i < a ;i++){
                        return (f(a-1) + f(a-2));            //函数f的递归调用,
                } 
       }
}
void main()
{
        int n;
        printf("input a number:\n");
        scanf("%d",&n);
        printf("%d\n",f(n));                                  //函数f的调用
}


运行结果:

如果输入3,则打印出来数列第三项的值为 1,(以此类推)


如果要打印出来fibonacci数列则需将代码变成

#include <stdio.h>


int f(int a)                                      //函数f的定义
{
        if( a==1 ){
                return 0;
        }
        if( a== 2 ){
                return 1;
        }
        else if(a >= 3){
                return (f(a-1) + f(a-2));            //函数f的递归调用,
        } 
}
void main()
{
        int i,n;
        printf("input a number:\n");
        scanf("%d",&n);
        for(i = 1 ; i < n ;i++)
        {
                printf("%-5d",f(i));                                            //调用函数f
                if( i % 4 == 0 )
                {
                        printf("\n");
                }
        }
}

在这里注意观察两个代码的不一样。


猜你喜欢

转载自blog.csdn.net/milustarting/article/details/71250320