这是一个古老的数学问题,有一对免子,从出生第三个月起每个月都生一对兔子,假如兔子都不死的话,求每个月兔子的总对数。这实际上是一个Fibonacci数,即前两个数是1,第三个数起,其后的每个数都是前面两个数之和。即:1 1 2 3 5 8 13......因此可用递归算法实现: #include<iostream>#include<iomanip>using namespace std;int main(){ long f1=1,f2=1; for(int i=1;i<=10;i++) //求20个月时每个月兔子的总对数 { cout<<setw(16)<<f1<<setw(16)<<f2; //每次输出两个月 f1=f1+f2; f2=f2+f1; } return 0;} 如果要实现某一个月的兔子的总对数,可用函数的递归调用: #include<iostream>#include<iomanip>using namespace std;int main(){ long fac(int ); cout<<"输入要查询的月份:"; int n; cin>>n; cout<<fac(n)<<endl; return 0;}long fac(int n){ if(n<=2) return 1; else return fac(n-1)+fac(n-2);}

评论