不死神图的原理即代码实现
原题
有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少? |
原理
我们假设初始定义为1对兔子的话,那么在前2个月我们就会发现兔子时没有发生变化的,也就是前两个月均为1只兔子,在第三个月时我们的兔子就会生下另一只兔子,也就是说我们在之后每一次都需要加上上一个月所有的兔子,就是简单可以理解成每一个月即前两个月的兔子之和。比如我们第5个月的兔子总数来说,三月份生下的兔子在这个月开始生育,生育数即三月兔子的数量,四月的兔子数并不是生育下来的兔子,因此5月兔子的总数即生育数加上4月兔子总数。这样我们就可以解释成为斐波那契数列,用它的方法来解决了。下面是它的原理图。
代码
方法一(数组的方法)
public static void main(String[] args) {
int arr[]=new int[20];
arr[0]=1;//第一个月和第二个月不生育,即初始的一只
arr[1]=1;
for(int i=2;i<=12;i++){//这里从2开始,因为第一个月和第二月一已定义
arr[i]=arr[i-1]+arr[i-2];
}
// System.out.println("第1个月为1只;");
// System.out.println("第2个月为1只;");
for(int a=1;a<=12;a++){
System.out.println("第"+a+"个月为"+arr[a-1]+"只;");
// System.out.println(arr[a]);
}
}
方法二 (递归的方法)
public static int fei(int n) {//在调用方法时输入你需要的月数就可以了比如fei(20);
if (n == 1 || n == 2) {
return 1;
} else {
return fib(n - 1) + fei(n - 2);
}
}