已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?
输入格式:
输入一个数n,表示第n个月,1<=n<=24。
输出格式:
输出这个月兔子的数目。
输入样例:
4
输出样例:
5
代码长度限制16 KB
时间限制400 ms
内存限制64 MB
方法一: 循环
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
if(month <= 3) System.out.println(month);
else{
int[] num = new int[month + 1];
num[0] = 1;
num[1] = 1;
for(int i = 2; i <= month; i++){
num[i] = num[i-1] + num[i-2];
}
System.out.println(num[month]);
}
}
}
![](https://img-blog.csdnimg.cn/img_convert/35c3ae0a0270dc2bc2edafd406956d06.png)
方法二:递归
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
if(month <= 3) System.out.println(month);
else{
System.out.println(getNumByMonth(1,1,month));
}
}
/**
* 根据月份获取兔子数量
* @param num1 当前月份前两个月的兔子对数
* @param num2 当前月份前一个月的兔子对数
* @param month 需要查询的月份
* @return 查询月份的兔子对数
* @PS 由题可知,兔子对数与前三月份数相等
* 从第四个月可知往后的月份的兔子对数为前两个月与前一个月的兔子对数之和
*/
public static int getNumByMonth(int num1, int num2, int month){
if(month > 0) {
return getNumByMonth(num2,num1 + num2,month - 1);
}
return num1;
}
}
![](https://img-blog.csdnimg.cn/img_convert/98732280a7245060c0469d6655e61c0a.png)