关于斐波那契数列的改进

来源:互联网 发布:plc编码器编程 编辑:程序博客网 时间:2024/05/29 03:21
斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……这个数列从第三项开始,每一项都等于前两项之和。
斐波那契数列最简单的实现就是递归:
#include<stdio.h>
int main(){
        int n;
        int fun(int);
        scanf("%d",&n);
        
        printf("%d",fun(n));
    
        return 0;
}

int fun(int n){
        if(n==1||n==2)
                return 1;
        else
                return (fun(n-1)%10007)+(fun(n-2)%10007);
}
 递归法虽然简单,“运行时间很长!对内存消耗太大了。时间复杂度为o(nlogn)
算法改进一:将递归的中间值保存起来;优点:时间复杂度降到了o(n),但是增加了内存的消耗。
算法改进二:
矩阵法, 算法复杂度为O(log n)
 由于F1=F1, F2=F0+F1,因此有,
类似地,
因此,
故为求得Fn,只需要对这个二次矩阵X进行n次方求解即可。这个方法虽然时间复杂度降低为O(logn),但是一般不用。
算法改进三:
公式法:时间复杂度降为O(1)
F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}

斐波那契数列一个很有意思的实际问题是兔子问题:一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后.第三个月开始生小兔子假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对?
很显然第一个月是一对兔子,第二个月因为不能生育还是一对兔子,第三个月就是两对了,是前两个月的和;第四个月是三对,是第二、三个月的和。依此类推...
                                             
0 0
原创粉丝点击