算法-斐波那契数列

兔子数列

#include <iostream>

using namespace std;
/*
 * 兔子数列
 * 第一个月有一对刚诞生的兔子,第二个月进入成熟期,第三个月开始生育兔子,而没一对成熟的兔子每月会生一对兔子,假设兔子
 * 永远不会死去,12个月后会有多少兔子
 *
 * 可知:从第三个月开始: 当月的兔子数 = 上月的兔子数+新生的兔子
 * 而新生的兔子= 上上月兔子数。
 * 因此:当月的兔子数 = 上月的兔子数 + 上上月兔子数
 */

//方法1 算法为指数阶算法,当N超过100,多算一个斐波那契数列需要一年的时间,爆炸增量函数。
int fib_1(int n)
{
    if(n<1)
        return -1;
    if(n==1 | n==2)
        return 1;
    return fib_1(n-1)+fib_1(n-2);
}
//方法2 每一项都是前两项的和,记录前两项,只需进行一次加法运算,即可得到当前项
// 使用该方法,时间复杂度为多项式阶
int fib_2(int n)
{
    if(n<1)
        return -1;
    int *a = new  int [n+1];
    a[1] = 1;
    a[2] = 1;
    for(int i= 3;i<=n;i++)
        a[i]=a[i-1]+a[i-2];
    return a[n];
}
//方法三 时间复杂度对数阶。 方法二使用数组记录中间结果。中间结果不需要记录。
int fib_3(int n)
{
    if(n<1)
        return -1;
    if(n==1 | n==2)
        return 1;
    int s1 = 1;
    int s2 = 1;
    for(int i=3;i<=n;i++)
    {
        s2 = s1+s2;  //
        s1 = s2-s1;  //记录前一项
    }
    return s2;
}
int main()
{
    cout << "Hello World!" << endl;
    int test  = 12;
    cout << "fib_1 the result is " <<fib_1(test)<<endl;
    cout << "fib_2 the result is " <<fib_2(test)<<endl;
    cout << "fib_2 the result is " <<fib_3(test)<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值