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

#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;
}