参考博客:【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); } } }
|