c语言兔子繁殖问题分析和递归方程,经典的兔子生兔子问题(C#递归解法)
古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
思路:先求出每個月新增的兔子,再用循環求和即可算出這個月總的兔子數。
月份 新增加兔子
1 1
2 0
3 1
4 1
5 1 + 1
6 1 + 1 + 1
7 (1 + 1 + 1)6月份新增的兔子 + (1 + 1)5月份新增的兔子
... ...
n n - 1月份新增的兔子 + n - 2月份新增的兔子
解法核心:每個月的新增的兔子都在下下個月以及以后的每個月生下一對新兔子,這對新兔子在下下個月以及以后的每個月都會生下一對新兔子,以此規律循環。
因此,只要上個月有新增的兔子后,這個月都會新增和上個月新兔子數量同樣的兔子,同時還會新增上上個月兔子數量的新兔子。這兩個數量相加就得到這個月一共新增加的兔子。
用遞歸的方法求出每個月新增的兔子(自定義函數):
static int NewRabbitOfMonth(int n)
{
if(n == 1)
{
return 1;
}
else if(n == 2)
{
return 0;
}
else
{
return NewRabbitOfMonth(n - 1) + NewRabbitOfMonth(n - 2);
}
}
用循環求和的方法求出每個月的兔子總數(主函數):
static void Main(string[] args)
{
Console.Write("請輸入第幾個月:");
int n = int.Parse(Console.ReadLine());
int sumRabbitOfMonth = 0;
for(int i =1; i <= n; i++)
{
sumRabbitOfMonth += NewRabbitOfMonth(i);
}
Console.Write("第" + n + "個月共有" + sumRabbitOfMonth + "對兔子");
Console.ReadLine();
}
思考:
每個月新增的兔子數量實際上是一個斐波拉契數列:
1,0,1,1,2,3,5...
每個月總的兔子數量也是一個斐波拉契數列:
1,1,2,3,5,8,13...
下面個數列每一項減去上面個數量每一項得到的新數列也是斐波拉契數列:
0,1,1,2,3,5,8...
結論:
一個斐波拉契數量的每一項減去另一個斐波拉契數列的對應每一項得到的新數列也是斐波拉契數列。(待驗證)
內容來源于網絡如有侵權請私信刪除
總結
以上是生活随笔為你收集整理的c语言兔子繁殖问题分析和递归方程,经典的兔子生兔子问题(C#递归解法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给定一个函数做其最佳平方逼近c语言,求函
- 下一篇: android 自动表单提交数据,And