Java学习——利用递归完成不死神兔问题
需求:兔子问题(斐波那契数列)。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …
首先我们对其数据进行分析,可知从第三天开始,每天的兔子数量等于前两天之和,其次我们要知道递归的思想:
递归:在方法中调用方法本身的现象。注意事项:1.递归要有出口 2.递归次数不宜过多 3.递归所体现的思想,就是拆分合并的思想
public class Test {
public static void main(String[] args) {
//定义一个方法去实现逻辑,传入月数并接收其返回值
int sum = sumRabbit(20);
//打印结果
System.out.println("兔子的对数为:"+sum);
}
private static int sumRabbit(int i) {
//判断传来的月数是不是第1个月或者两个月,如果是则返回1
if(i==1||i==2){
return 1;
}else {
//如果传来的月数不是1或者2,那么返回前两个月兔子数量的和;这里采用了递归的思想
return sumRabbit(i-1)+sumRabbit(i-2);
}
}
}