斐波那契数列

来源:互联网 发布:linux 网卡配置文件 编辑:程序博客网 时间:2024/06/04 01:31

斐波那契数列的递推关系如下:

F(n)=F(n-1)+F(n-2)  当 n=1和n=2时,F(1)=F(2)=1.

所以容易得出斐波那契的递归实现:

int fab(int n){

        if(n==1||n==2){

        return 1;

       }else{

              return fab(n-2)+fab(n-1);

              }

 }

由于递归的效率比较低;其实现流程大概是这样的:

要求n=5的情况: 

                          fab(5)--->fab(4)+fab(3);

                           fab(4)--->fab(3)+fab(2);

                          fab(3)--->fab(2)+fab(1);   注意这边的3是fab(4)所要求的fab(3),并非fab(5)求的那个fab(3);

                         fab(2)==fab(1)==1;

                         fab(3)==2;

                         fab(2)==1;     这边的fab(2)是fab(4)屁股后面的那个fab(2);

                         fab(4)==fab(3)+fab(2)==3;

  接着求fab(5)的fab(3);

                       fab(3)------>fab(2)+fab(1);

                       fab(2)==fab(1)==1;

                       fab(3)==fab(1)+fab(2)=2;

                       fab(5)==fab(4)+fab(3)==5;

可以看出,递归是以找到谷底再回溯上来的一种方式进行的,并且用过2次的相同的值不会记录,如fab(3)被计算了2次;效率很低。


循环迭代的实现方法会比递归效率高:

int fab(int n){

           int f1,f2=1;

           int f3=0;

           if(n==1||n==2){

                return 1;

            }else{

                    for(int i=0;i<n-2;i++){

                            f3=f1+f2;

                            f1=f2;

                            f2=f3;

                    }

             return f3;

           }

}



猜想:

由于F(n)=F(n-1)+F(n-2);  想象一下,如果F(n)=2*F(n-1),那么F(n)=2^n,这边F(n-2)比F(n-1)小,假设有个1<a<2,使F(n)=a^n为斐波那契数列;

              代入得 a^n=a^(n-1)+a^(n-2);

                    a^2=a+1;

                解得 a1=(1+sqrt(5))/2  ,a2=(1-sqrt(5))/2 ; sqrt为根号

                a1,a2为2个不同的解 ,所以这个递推公式可以写成 F(n)=b1*(a1)^n+b2*(a2)^n

                将F(1)=1,F(2)=1代入得

                c1*(1+sqrt(5))/2+c2*(1-sqrt(5))/2=1  

                c1*((1+sqrt(2))/2)^2+c2*((1-sqrt(5))/2)^2=1


                解得 c1=1/(sqrt(5))  c2=-1/(sqrt(5));

                所以F(n)通式为: F(n)=(1/sqrt(5))((1+sqrt(5))2)^n-(1/sqrt(5))((1-sqrt(5))/2)^n;


               看着恐怖,其实就是 (1/√5)[(1+√5)/2]^n-(1/√5)[(1-√5)/2]^n;



原创粉丝点击