题目:有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔
子都不死,问每个月的兔子总数为多少?
分析:这是一个典型的斐波那契数列问题,当月的兔子数=老兔子+新兔子,这里的老兔子就是上个月所有兔子,而新兔子就是上上个月的所有兔子(到这个月有了生育能力),即f(n)=f(n-1)+f(n-2)或者我们直接根据每月兔子数量也能得出这个结论:1 1 2 3 5 8...
方法(1):
//方法(1) 递归实现
int get_total_count1(int month)
{
assert(month >= 1);
if (month == 1 || month == 2)
return 1;
return get_total_count1(month - 1) + get_total_count1(month - 2);
}
方法(2):
int get_total_count2(int month)
{
assert(month >= 1);
int first = 1;
int second = 1;
int month_count = 1;//当前月兔子数
while (month > 2)
{
month_count = first + second;
first = second;
second = month_count;
month--;
}
return month_count;
}