【程序1】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
首先我们解析题目 由于兔子从第3个月起才生小兔子故 第一个月和第二个月的兔子数为1。
现在假设要求第k+2个月的兔子数,我们可以先假设k个月有(x1+x0)只兔子,其中x0为在第个月出生的兔子。所以我们可以知道k+2的兔子数为x1+x1+x1+x0+x0。但是现在我们不知道x1和x0的具体数目。由于我们知道k+1的兔子数为x1+x1+x0。故我们可得这三个月的兔子数之间的关系为;
k+2=(k+1)+k。有了这个递推关系后我们很简单的就可以计算每个月的兔子数,下面是java源代码:
/**
*
* @author Administrator
*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子
*,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
*问每个月的兔子总数为多少?
*1,1,2,3,5,8,13,21....
*2015年1月27日21:05:05
*/
public class TuZi {
public int cal(int month,int initalNum){
if(month<1){
throw new IllegalArgumentException("哥们month="+month+"不合适吧!");
}
if(month<3){
return initalNum;
}
return cal(month-1,initalNum)+cal(month-2,initalNum);
}
public static void main(String args[]){
for(int i=1;i<10;i++){
System.out.println(new TuZi().cal(i, 1));
}
}
}