算法思想之递归法,以最著名的“兔子繁殖问题”为例
问题提出:
有一对两个月大的兔子,从出生后第3个月起每个月都生一对兔子,
小兔子出生后两个月也可以生小兔子,以此类推
假如兔子都不死,问某个月后的兔子总数为多少?
第一个月:1 对
第二个月:1 对
第三个月:2 对
第四个月:3 对
第五个月:5 对
......
由此可以看出,从第三个月起,每个月的兔子总数等于前两个月兔子的总数。
相应的计算公式如下:
起始第一个月F(1)=1,第二个月F(2)=1,
第N个月的兔子总数F(N)=F(N-1)+F(N-2),故可以使用递归公式来求解。
#include <iostream>
using namespace std;
int Fibonacci(int n)
{
if (n==1||n==2)
{
return 1;
}
else
{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
int main()
{
cout<<"----用递推思想求兔子产仔问题----"<<endl;
int num,when;
cout<<"请输入时间:";cin>>when;
num=Fibonacci(when);
cout<<"经过"<<when<<"个月时间,共有"<<num<<"对兔子\n";
return 0;
}