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