参考博客:【Java】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

解析:有一对兔子从出生后第三个月起,每个月都生一对兔子,小兔子长到第三个月又生一对兔子,每个月兔子的总数是? - 阿木的回答 - 知乎

题目

算法题攻略-古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

关键点分析

3个月起每个月都生一对兔子,实际是2个月生一对兔子!

图解分析

java代码

符合:斐波那契数列

函数关系: f(n) = f(n-1)+f(n-2)

package com.ruoyi;

import java.util.Scanner;

public class Demo {

// 当位数为1时,其返回值 = 1 = 1 + 0;
// 当位数为2时,其返回值 = 1 = 1 + 0;
//开始变化(题目中数学关系需要自己解析发现:一对兔子是满足2个月就可以生成一对新兔子)
// 当位数为3时,其返回值 = 2 = 1 + 1;
// 当位数为4时,其返回值 = 3 = 2 + 1;
// 当位数为5时,其返回值 = 5 = 3 + 2;
// 当位数为6时,其返回值 = 8 = 5 + 3;
// 当位数为7时,其返回值 = 13 = 8 + 5;
// 当位数为8时,其返回值 = 21 = 13+ 8;

// f(n) = f(n-1)+f(n-2)

/** 获取指定月数的兔子数量 */
public static Integer getRabbitCount(
Integer month
){

if( month.equals( 1 ) || month.equals( 2 ) ){
return 1;
}else{
if( month.equals( 3 ) ){
return 2;
}else{
return getRabbitCount(month - 1) + getRabbitCount(month - 2);
}
}

}

public static void main(String[] args) {

Integer number = null;

while(true){
System.out.println("---请输入第几月(month)---");
Scanner scanner = new Scanner(System.in);
number = scanner.nextInt();

if( number == 0 ){
break;
}

Integer count = getRabbitCount(number);
System.out.println(count);
}
}
}