package cn.itcast_01;
/*
* 不死神兔问题:
* 有一对兔子,从出生第三个月起每一个月都生一对兔子,小兔子长到第三个月又生一对兔子
* 假设兔子都不死,问第20个月的兔子对数为多少
*
* 分析: 兔子对数
* 第一个月 1
* 第二个月 1
* 第三个月 2
* 第四个月 3
* 第五个月 5
* 第六个月 8
* 兔子对数的数据是:
* 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 = 4
* 看到了:下一次的a是以前的b下一次的b是以前的a+b
*
*/
public class 递归练习 {
public static void main(String[] args) {
//数组实现
//定义一个数组
int[] arr = new int[20];
arr[0] = 1;
arr[1] = 1;
//arr[3] = arr[0]+arr[1]
//......
for(int x=2;x<arr.length;x++) {
arr[x] = arr[x-2]+arr[x-1];
}
System.out.println(arr[19]);
//第二种方法
int a = 1;
int b = 1;
for(int x =0;x<18;x++) {
//临时变量
int c = a;
a=b;
b = b+c;
}
System.out.println(b);
System.out.println(fib(20));
}
/*
* 方法:
* 返回值类型:int
* 参数列表:int n
* 出口条件:
* 第一个月是1,第二个月是2
* 规律;
* 从第三个月起,每个月是前两个月之和
*
*/
public static int fib(int n) {
if(n == 1 || n == 2) {
return 1;
}else {
return fib(n-1)+fib(n-2);
}
}
}
递归练习之有一对兔子,从出生第三个月起每一个月都生一对兔子,小兔子长到第三个月又生一对兔子 假设兔子都不死,问第20个月的兔子对数为多少
最新推荐文章于 2023-11-07 16:14:30 发布