不死神兔案例!
public class TheUndeadRabbit {
public static void main(String[] args) {
int rabnum = getRabbitNum(20);
System.out.println("问第二十个月的兔子数为多少?\n" + rabnum);
System.out.println("程序结束!");
System.out.println("---------------------------------------------------");
/*
需求:
有一对兔子,从出生后第3个月起每个月都生一对兔子
小兔子长到第三个月后每个月又生一对兔子
假如兔子都不死,问第二十个月的兔子数为多少?
思路:第三个月的兔子的总量 = 第二个月的兔子总量 + 第一个月的兔子总量
结论:每月的兔子总数为前两个月的兔子数之和
方法
方法一:使用递归思想求解,采用数组的方式实现
方法二:采用变量赋值相互传递的方式实现
方式三:使用递归思想求解,构建方法,方法中调用方法形成循环,if作为循环终止条件
*/
//方法一
//定义和初始化兔子数组rab用于存储兔子对数
int[] rab = new int[20];
rab[0] = 1;
rab[1] = 1;
//采用for结构循环计算下个月的兔子总量,直到数组长度减一为止
for(int i = 1;i < rab.length - 1;i++) {
//下个月的兔子总量 = 本月的兔子总量 + 上个月的兔子总量
rab[i+1] = rab + rab[i-1];
}
//输出第二十个的月兔子总量
System.out.println("问第二十个月的兔子数为多少?\n" + rab[19]);
System.out.println("程序结束!");
System.out.println("---------------------------------------------------");
//方法二
//定义兔子总数计数变量count,第一个月兔子总数变量num,第二个月兔子的总数变量num1
int count = 0,num = 1 ,num1 = 1;
//采用for结构循环计算每月兔子的总数,每月的兔子总数为前两个月的兔子数之和
for(int i = 3;i <= 20;i++) {
//下个月的兔子总量 = 本月的兔子总量 + 上个月的兔子总量
//第三个月的兔子的总量 = 第二个月的兔子总量 + 第一个月的兔子总量
//每月的兔子总数为前两个月的兔子数之和
count = num1 +num;
num = num1;
num1 = count;
}
//输出第二十个的月兔子总量
System.out.println("问第二十个月的兔子数为多少?\n" + count);
System.out.println("程序结束!");
System.out.println("---------------------------------------------------");
}
//方法三
//构建getRabbitNum方法,month作方法的形参,表示需要传入的月份
public static int getRabbitNum(int month) {
//if和else中return返回调用方法getRabbitNum得到的值构成循环
//month等于1或者2时返回值1,且停止循环
if(month == 1 || month == 2) {
return 1;
} else {
return(getRabbitNum(month-1) + getRabbitNum(month -2));
}
}
}
|
|