生兔子问题

有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子。假如兔子都不死,计算第十个月兔子的总数?

分析:

四个月开始生兔子,则:F(N) = f(n-1)+ f(n-3)。可以运用递归来解决问题。

 

import java.util.ArrayList;
import java.util.List; public class 生兔子 { public static void main(String[] args) {
// System.out.println(f(13));
int n = 13;
int [] num = new int[14];
num[1]=1;num[2]=1;num[3]=1;
for (int i=4;i<=n;i++){
num[i]=num[i-1]+num[i-3];
}
System.out.println(num[n]);
} public static int f(int n){
if(n==1 || n==2 || n==3){
return 1;
}
// 今年的 = 去年的+今年新出生
//去年的 今年新出生的
return f(n-1) + f(n-3);
} }

如果当出生后第三个月开始生兔子: F(N) = f(n-1)+ f(n-2)

今年的总数=去年的总数+今年的新出生的兔子,

而今年新出生的兔子=今年成熟了的兔子数量(每只成熟的兔子生一只小兔),

那今年成熟了的兔子数量又是什么呢?其实就是前年的兔子总数,因为前年的兔子,不管几岁,到今年一定成熟,可以生新兔子了。而去年的没有成熟,不能生兔子。

所以今年的总数=去年的总数+前年的总数。

F(n)=F(n-1)+F(n-2)。

这个数列就是1、1、2、3、5、8、13、21、34、……

在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。


(按照上面的改一下就好了)

烦人的来了

但是就有这么一个问题:兔子也会死

出生到死亡只有三年,即n年出生,n+3年死去。

出生一年以后可以生育,也就是n+1年开始生育,一年可以生一只宝宝。

这时我们换一个思路:

定义f(n)为第n年新出生的动物个数,则f(n)=f(n-1)+f(n-2),前两项为1,而每年的总数也就是三项求和而已。

每年出生的数量为1,1,2,3,5,8,13,21

每年兔子的总数是 1,2,4,6,10,16,26,42

最新文章

  1. linux的top命令参数详解
  2. Js replace() 学习笔记
  3. P1546 最短网络 Agri-Net
  4. cassandra.yaml介绍
  5. MIT牛人解说数学体系
  6. android 反编译apktool工具
  7. dede cms列表页调用文章简介(借鉴)
  8. codeforces 336D. Vasily the Bear and Beautiful Strings 组合数学 dp
  9. 一个类似bootstrap的foundation
  10. 用python3破解wingIDE
  11. docker+tomcat+java配置(ubuntu)
  12. NOIP2002 矩形覆盖
  13. Mysql 笔记:
  14. linux_ubuntu 16.04 更新wifi驱动_无法链接wifi问题
  15. 【Django】Python web开发:几个模板系统的性能对比(转)
  16. C/C++ 知识点---数组与指针
  17. char,varchar,nvarchar,text区别与联系
  18. Notepad++运行Java
  19. 有状态InheritableThreadLocal 配合 JDK8 ,异步方法调用
  20. 设计模式のIOC(控制反转)

热门文章

  1. Asp.Net Core 3.1学习-读取、监听json配置文件(7)
  2. 集群、分布式、SOA、微服务、webService等思想的整理
  3. zabbix email报警
  4. DOM的使用
  5. 点击劫持ClickJacking
  6. dTree
  7. uefi win10 Ubuntu 18的安装
  8. Poj1753 翻转棋子
  9. 转载 配置vue项目
  10. JavaScript 实现 冒泡排序