老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
2013-03-05 10:23
337 查看
问题描述:从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
解决方案1:
思想方法:某月的兔子数量即为上个月的兔子数量+上个月出生的兔子数量,而出生的兔子数量即上个月的大兔子数量,也即上上月的兔子数量(上上月的兔子到了上个月一定会成为大兔子,一定会生兔子宝宝)。所以很明显兔子数量为斐波那契数列,下面只需要用代码计算斐波那契数列即可。
核心代码:
public static int recurse(int month){
if(month==1||month==2)
temp=1;
if(month>2)
temp=recurse(month-1)+recurse(month-2);
//System.out.println("temp="+temp);
return temp;
}
如果我们没有数学基础怎么办,不会分析,不知道斐波那契数列怎么办?没关系,可以这样思考
解决方案2:
思想方法:虽然不知道斐波那契数列,但是我们如果知道某个月的大兔子小兔子两者的数量,一定可以知道下个月的大兔子小兔子数量,所以我们可以通过N次这个过程,计算出任何一个月的大小兔子数量。
核心代码:
while(month>0){
int temp=small;//先保存small即小兔子的数量,因为小兔子数量一会会变化
small=big;
big=big+temp;
month--;
}
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
解决方案1:
思想方法:某月的兔子数量即为上个月的兔子数量+上个月出生的兔子数量,而出生的兔子数量即上个月的大兔子数量,也即上上月的兔子数量(上上月的兔子到了上个月一定会成为大兔子,一定会生兔子宝宝)。所以很明显兔子数量为斐波那契数列,下面只需要用代码计算斐波那契数列即可。
核心代码:
public static int recurse(int month){
if(month==1||month==2)
temp=1;
if(month>2)
temp=recurse(month-1)+recurse(month-2);
//System.out.println("temp="+temp);
return temp;
}
如果我们没有数学基础怎么办,不会分析,不知道斐波那契数列怎么办?没关系,可以这样思考
解决方案2:
思想方法:虽然不知道斐波那契数列,但是我们如果知道某个月的大兔子小兔子两者的数量,一定可以知道下个月的大兔子小兔子数量,所以我们可以通过N次这个过程,计算出任何一个月的大小兔子数量。
核心代码:
while(month>0){
int temp=small;//先保存small即小兔子的数量,因为小兔子数量一会会变化
small=big;
big=big+temp;
month--;
}
相关文章推荐
- [算法]经典算法8皇后(N皇后)问题的解法,C语言实现
- 经典数学问题“鸡兔同笼”竟还有这种解法?
- 【Java算法学习】斐波那契数列问题-兔子产子经典问题
- Queen 八皇后问题 回溯经典解法
- 经典算法之天平称重问题(进制解法)
- 【经典算法】:开灯问题,貌似没啥新解法了。。。
- java编程:斐波那契数列经典案例:兔子问题
- 经典问题“八皇后”的解法
- LA 3882 经典约瑟夫环问题的数学递推解法
- 【BFS】由八数码问题的BFS解法引出的三种BFS经典状态判重方法
- 经典问题的非经典解法
- 最大流问题的几种经典解法综述
- 经典c程序(0007)---兔子问题(斐波那契数列)
- hdu 2553 N皇后问题 经典搜索,DFS解法
- C语言经典弱智问题解法整理
- 斐波那契数列(生小兔子问题)
- java编程经典案例之基于斐波那契数列解决兔子问题实例
- 斐波那契数列问题-兔子繁衍问题-c语言-c++-经典问题-编程
- POJ 1321 经典棋盘问题 的搜索和状态压缩解法
- 逆序对问题的另一种经典解法:归并排序