递归,直接套斐波那契数列公式(超时,不得分)
#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;
}


京公网安备 11010502036488号