package org.westos_11;
/**
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问
第二十个月的兔子对数为多少?
找规律:
兔子对数的规律:
第一个月:1
第二个月:1
第三个月:2
第四个月:3
第五个月:5
第六个月:8
.....
规律:
1)从第三个月开始:每个月兔子的对数等于前两个月之和
2)第一个月和第二个月数据是已知的
把每个月相邻兔子对数数据当做:a,b
第一个月和第二个月相邻的数据:a=1,b=1
第二个月和第三个月相邻 的数据:a=1,b=2
第三个月和第四个月相邻的数据:a=2,b=3
第四个月和第五个月相邻的数据:a=3,b=5
....
下一次的a是上一次的b,下一次的b是上一次的a+b
数组或者递归
递归:
三个条件:
1)定义一个方法
2)必须有规律
3)要有出口条件
举例:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:
从前有座山,山里有个庙,庙里有个老和尚和小和尚,老和尚给小和尚讲故事,故事是:
....
庙塌了,挂了..
* @author Apple
*/
public class DiGuiTest {
public static void main(String[] args) {
//定义一个数组:动态初始化
int[] arr = new int[20] ;
//第一个月和第二个月兔子对数都是已知的
arr[0] = 1 ;
arr[1] = 1 ;
//arr[2] = arr[0]+ arr[1] ;
//arr[3] = arr[1]+arr[2] ;
for(int x = 2 ; x < arr.length; x ++){
//计算出每一个月兔子对数的数据
arr[x] = arr[x-1]+arr[x-2];
}
System.out.println("第二十个月兔子的对数是:"+arr[19]);//6765
System.out.println("----------------------");
System.out.println("第二十个月兔子的对数是:"+fib(20));//6765
}
/**
*
* @param n
* n表示月份
* @return
* 返回值是兔子的对数
* 规律:
* 第一个月和第二个月兔子的对数1:从第三个月开始,每一个月兔子对数的数据是前两个月之和
*/
private static int fib(int n) {
if(n==1 || n==2){//出口条件
return 1 ;
}else{
return fib(n-1) + fib(n-2) ;//中间的规律
}
}
}
递归求解兔子对数问题
最新推荐文章于 2024-04-26 16:48:31 发布