java:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
/**
* <h2>兔子算法</h2>
* <pre>
* 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
* </pre>
*
* @version v1.0
* @className RabbitAlgorithm
* @createTime 2023/9/1 16:18
*/
public class RabbitAlgorithm {
public static void main(String[] args) {
//分析1.兔子数量以一对为单位计算,起始为1对,
//分析2.当前新增的每对兔子第三个月起每月会新增一对
//分析3.以时间为单位,纪录当前兔子数量和上月新增的兔子数量
//当前兔子数量
long nowNum = 5;
//假设我需要计算10个月后有多少只兔子
long i = Say10Months(nowNum,7);
System.out.println(i);
}
private static long Say10Months(long nowNum, long size) {
//第一个月,当前兔子维持原数,第二个月,当前兔子维持原样,第三个月,兔子开始增加
long lastNewNum = 0;
long newNum = 0;
for (int i = 2; i < size; i++) {
//本月新增数量 = 总数量 - 一个月前新增
newNum = nowNum - lastNewNum;
//总数量 = 本月增加数量 + 历史数量
nowNum = newNum + nowNum;
lastNewNum = newNum;
}
return nowNum;
}
}