编程练习随笔----斐波那契数列

题目描述

斐波那契数列挺经典的,OJ可以点击链接提交查看(牛客网)

代码分析

/**
 * 
 * @param n int整型 
 * @return int整型
 */
int Fibonacci(int n ) {
    // write code here
    int ans = 0;//存放最终结果
    int Front[2] = {0,1};//递归公式前2项
    if( n < 2 )
    {
        switch (n)
        {
            case 0: ans = 0;break;
            case 1: ans = 1;break;
        }
    }
    else{
    while(n-1)
    {
        ans = Front[0] + Front[1];
        Front[0] = Front[1];
        Front[1] = ans;
        n--;
    }
        }
    return ans;
}

如果直接用递归来解的话,提交后会超出时间限制,毕竟递归过程中产生中间结果开销实在是太大了。
于是,考虑到斐波那契数列的求解表达式为
F(n) = F(n-1) + F(n-2)
其中,F(0)=0,F(1)=1
如果把每一次两项相加作为一层,求解F(n)时,递归得到F(1)+F(0)层,相加的两项都是已知项才可以得出结果。照这个想法,我们设置Front[2]数组来存储F(n-1)和F(n-2)的值,每层计算结束后只需要将二者和放在F[1]中,原来的F[1]前移放到F[0]中,以此进行下一层的操作即可。
下表就是递归过程中待求项和递归层数的关系:

待求项递归层数
F(2)1
F(3)2
F(4)3
F(n)n-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值