兔子繁殖问题与解决方案

一、兔子繁殖问题

问题描述:

兔子永远不死;

兔子出生后,两个月(即从它生命中的第三个月开始)达到性成熟;

兔子总是雌雄成对出生。每个月月初,每对性成熟的兔子正好生一对小兔;

计算第n个月的兔子数——rabbit(n)。

二、问题分解

rabbit(n)正好是第n个月之前活着的兔子数与第n个月月初出生的兔子数之和。在第n个月月初前,有rabbit(n-1)对兔子数,同时那些在第n-2个月活着的兔子在第n个月月初准备生产,即第n个月月初出生的兔子数是rabbit(n-2)。因此有递归关系式:

rabbit(n)=rabbit(n-1)+rabbit(n-2)    -----(A)

三、递归方法

根据实际问题,设置两个基本事件:rabbit(1)=1和rabbit(2)=1,由此,递归定义式为:

rabbit(n)=1when  n=1 or n=2;

rabbit(n)=rabbit(n-1)+rabbit(n-2)when  n>2;

rabbit(1),rabbit(2),rabbit(3),... ... 称为Fibonacci序列,它是许多自然现象的模型。

rabbit(n)的Java方法:

[java]view plaincopy

publicstaticint rabbit(int n){

//------------------------------------------

//Computes a term in the Fibonacci sequence

//Precondition:n is a positive integer

//Postcondition:Returns the nth Fibonacci number

//------------------------------------------

if(n<=2){return1;}

else {//n>2, so n-1>0 and n-2>0

return rabbit(n-1)+rabbit(n-2);

}//end if

}//end rabbit

四、迭代方法

rabbit的递归解决方案本身效率很低,当n相当大时,许多值可能重复计算上亿次。迭代解决方案用向前推替代向后推,并且每个值只计算一次,即使n非常大也可以计算,其Java方法如下:

[java]view plaincopy

staticint iterativeRabbit(int n){

//Iterative solution to the rabbit problem.

//initialize base cases:

int previous=1; //initially rabbit(1)

int current=1;  //initially rabbit(2)

int next=1;     //result when n is 1 or 2

//compute next rabbit values when n>=3

for(int i=1;i<=n;i++){

//current is rabbit(i-1),previous is rabbit(i-2)

next=current+previous;  //rabbit(i)

previous=current;       //get ready for

current=next;           //next iteration

}

return next;

}//end iterativeRabbit

(0)

相关推荐

  • 目前淘宝流量提升见效最快的方法全在这里了!

    现在做淘宝店铺的人越来越多了,下面我们就一起来看看目前淘宝流量提升见效最快的方法吧! 淘宝流量提升方法 01 首先大致分为四个阶段:起步.成长.冲刺.基本稳定. 02 起步的话,一方面首先要确保自己的 ...

  • 如何编程实现斐波那契数列

    斐波那契数列是经典的数学问题,同时也是编程中经典算法之一,使用递归方法可以顺利编程实现该问题,现在就使用vb6编程求解斐波那契数列,同时分享实现的步骤和过程,希望对你有所帮助. 操作方法 01 启动v ...

  • 饥荒怎么圈养兔子

    饥荒怎么圈养兔子,相信很多玩这个游戏的朋友们对此都很感兴趣,下面就和大家来分享一下,希望可以帮助到大家. 操作方法 01 我们需要准备好石墙和木质大门,还有捕捉好的兔子. 02 制作的石墙围起一个矩形 ...

  • 我的世界兔子养殖场怎么做

    我的世界是一款非常热门的沙盒游戏,在这里你可以建造自己想做的一切东西,这次小编为大家带来的是一个兔子养殖场的做法,这个养殖场非常的好用,而且方便,做法也非常的好学. 操作方法 01 首先你得选好兔子养 ...

  • iphone4S手机Wifi间歇性掉线解决方案

    本人是日版iphone4S,买回来5.0 现在5.01 都出现这种问题,(同样环境下iphone3gs好着呢) 出现症状描述,看网络视频大概30分钟左右出现掉线(icloud备份时,或者其它一些情况下 ...

  • itunes错误3194常见错误解决方案

    iTunes常见错误解决方案 1603,1604错误 是你的Apple Mobile Device服务没有开启。在我的电脑上点右键-管理-服务和应用程序-服务,然后在右边找到并单击Apple Mobi ...

  • 一体机Realtek网卡安装联想网站上的网卡驱动报错的解决方案

    故障现象: Realtek网卡的一体机安装联想网站上的网卡驱动出现报错“The Realtek Network Controller was not found.If Deep Sleep Mode ...

  • 内存不能为read故障分析及解决方案

    内存不能为read,最近挺多网友电脑出现这样的问题,内存不能为read怎么解决,建议先了解一下是如何产生内存不能读,以后碰到类似的才不会困惑。一般如果是玩游戏出现有可能该游戏软件冲突,建议卸载重新安装 ...

  • windows Server 2008 IIS7 503错误解决方案

    windows 2008 R2 在访问的时候经常会出理 503错的解决方案 Error Summary: HTTP Error 503.2 - Service Unavailable The serv ...