斐波那契数列(兔子总数问题)递归递推解法分析

统计每个月兔子的总数

http://www.nowcoder.com/questionTerminal/1221ec77125d4370833fd3ad5ba72395

递归,直接套斐波那契数列公式(超时,不得分)

#include <iostream>
using namespace std;

int func(int n)
{
    if(n < 3)
        return 1;
    if(n >= 3)
        {
                return func(n -1) + func(n -2 );
        }
}

int main()
{
    int n = 0;
        while(1)
        {
                cin >> n;
                cout << func(n) << endl;
        }
    return 0;
}

递推

想象一下数字电路中的寄存器模型,3个月其实刚好对应三级移位寄存器,那么定义3个变量记录每级寄存器的值,然后累加就好了:

#include <iostream>
using namespace std;
int main()
{
        int n = 0;
        while(cin >> n)
        {
                int last1 = 1; //上月兔子数量
                int last2 = 0; //前一个月的兔子数量
                int f =0;      //当月兔子数量
                for(int i = 1; i < n; i++) {
                        f = last2 + last1 ;//一级流水线,当月兔子数量 = 上上月的兔子数 + 上个月的兔子数
                        last2 = last1 ;    //二级流水线,记录上一个月的最新兔子数,那么下次循环就可以获取前一个月的数据了
                        last1  = f;        //三级流水线,记录当月最新兔子数,那么下次循环就可以获取上个月的数据了
                }
                cout << f << endl;
        }
        return 0;
}
全部评论
超时是因为while(1)死循环,去掉就行了
点赞 回复 分享
发布于 2021-06-11 18:08

相关推荐

点赞 评论 收藏
分享
coffrar:全都是已读😅沟通一千五百多个了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
02-12 18:14
RT,这周五就是情人节了,前女友给我发了消息,我该不该回?
Yoswell:原则上来说让她滚,但是本着工作很累下班想吃瓜的心态,我觉得你可以回一下
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客企业服务