题目
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
分析
由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …
前两个月兔子都是一对,从第三个月开始每个月的兔子是前两个月兔子的和
程序代码
非递归实现
package com.company.demo;
public class MyDemo {
public static void main(String[] args) {
int[] arr = new int[20];
//前两个月都是1对
arr[0] = 1;
arr[1] = 1;
//从第三个月开始
for (int i = 2; i < arr.length; i++) {
//从第三个数开始,每个数等于他前两个数之和
arr[i] = arr[i - 1] + arr[i - 2];
}
System.out.println(arr[19]);
}
}
递归实现
package com.company.demo;
public class MyDemo {
public static void main(String[] args) {
int num = rabbitSum(20);
System.out.println(num);
}
private static int rabbitSum(int i) {
//找出口
if (i == 1 || i == 2) {
return 1;
} else {
return rabbitSum(i - 1) + rabbitSum(i - 2);
}
}
}
运行结果
递归和非递归运行结果都一样