题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
//这是一个菲波拉契数列问题
public class lianxi01 {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数: 1");
System.out.println("第2个月的兔子对数: 1");
int f1 = 1, f2 = 1, f, M=24;
for(int i=3; i<=M; i++) {
f = f2;
f2 = f1 + f2;
f1 = f;
System.out.println("第" + i +"个月的兔子对数: "+f2);
请问这个程序到底怎么理解呢?万分感谢!
这是典型的斐波那契数列(Fibonacci sequence)问题,程序中的f1,f2代表的是第1、2个月的兔子总数,M为月份,假设兔子对数为1,1,2,3,5,8........
f2就是一组数中第三个位置上的元素(如1,1,2三个数中f2就是2;3,5,8中就是8),f2为前两个数的和。你这程序递归出口太乱了,建议将出口分开处理,这是递归问题的一般处理方法。望对你有帮助!!
问题是这样的:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子, 假如兔子都不死,问每个月的兔子总数为多少? 这个问题相信大家已经不在陌生了。很多博客里都有各种不同的解答方法。 最多的方法就是先列出最初几个月的兔子对数(注意是对数,不是个数)。如下所示:1,1,2,3,5,8,13,21,34....然后观察数据的规律,从而得出这样一......
答案就在这里:JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
http://blog.csdn.net/duxinfeng2010/article/details/7770354
http://blog.csdn.net/duxinfeng2010/article/details/7770354
你可以去了解一下递归的概念,这个就不难理解了
逻辑很简单,第一、第二个数固定为1,从第三个数开始后面的数的值都是其前两个数的和
理解这个迭代程序最主要是需要理解 f1 和 f2,f2表示这个月的兔子总数,f1表示在这个月的所有兔子中下个月能生产兔子的总数
故下次迭代时,f2为f1+f2,而f1为上次的f2
这样结束应该可以理解吧~
谢谢了!请问将出口分开处理要如何写呢?