斐波那契数列(兔子总数问题)递归递推解法分析
统计每个月兔子的总数
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; }