黑马程序员技术交流社区

标题: 一个关于兔子的编程算法问题. [打印本页]

作者: monian2014    时间: 2014-12-17 00:13
标题: 一个关于兔子的编程算法问题.
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

下边是代码:   兔子的规律为数列1,1,2,3,5,8,13,21...
int n = 10;
                System.out.println("第"+n+"个月兔子总数为"+fun(n));
        }
        private static int fun(int n){
                if(n==1 || n==2)
                   return 1;
                else
                   return fun(n-1)+fun(n-2);

前边的都没问题,那位可以解释一下 为什么是return fun(n-1)+fun(n-2);从字面上很好理解,我知道是一个递归的算法   问题是怎么从实际题目意思的角度去理解这个返回的语句. 高手赐教额:)

作者: zhaozhao    时间: 2014-12-17 12:10
递归算法的主要特点是一个问题的本身可以分解为其同类的子问题,而在这里return fun(n-1)+fun(n-2);的意思就是:这个月的兔子总数是前两个月兔子总数之和,这一点可以通过你给出的数列看出。当然,你也可以自己归纳出这个规律!
作者: zmhlnrs    时间: 2014-12-17 13:00
递归就是函数本身调用自己
作者: monian2014    时间: 2014-12-17 23:55
谢谢大家的回复,大家还是没有明白我的意思, 当然可以从数组看出这个规律,我是说从题目内容本身推出来为什么这个月的兔子数量是前两月的之和.:)
作者: quick3g    时间: 2014-12-18 00:35
兔子的规律为数列1,1,2,3,5,8,13,21...可以看作是求斐波那契数列1,1,2,3,5,8,13,21...的n项和。
可以看出:F1=1,F2=1,F3=F(2)+F(1)=2
Fn=F(n-1)+F(n-2)(n >=3的整数)
Fn-1=F(n-2)+F(n-3)
.................................(往前递推得)
F3=F(2)+F(1)=2
最后问题简化成求F3
n个月兔子数量就是n-1,n-2个月数量之和,递推到F3,然后在用程序表达出来。
作者: Rain2692    时间: 2014-12-18 12:19
递归的算法。。。和斐波那契数列很相似的。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2