黑马程序员技术交流社区

标题: 求大神帮我看看这个问题 [打印本页]

作者: zhou1234    时间: 2015-1-18 16:50
标题: 求大神帮我看看这个问题
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
public class Prog1{
        public static void main(String[] args){
                int n = 10;
[size=10.5000pt]        [size=10.5000pt]        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);
        }
}
不懂原理啊


作者: 沌沌愚人心    时间: 2015-1-18 17:01
第一对兔子从第二个月开始每个月都生一对兔子,到第 n 个月 生了 n-2 对兔子‘
第五个月开始又有一对兔子开始是生了小兔了,到第那个月共生了n-4个兔子

作者: 时间来过    时间: 2015-1-18 19:34
xuexi#在这#里快速不懂学习
作者: Gonnaloveu    时间: 2015-1-18 19:38
最近铺天盖地都是兔子
作者: da_chuan    时间: 2015-1-18 19:40
这是方法递归,后面数等于前两个数的和
作者: Novice.Jin    时间: 2015-1-18 19:43
斐波那契数列啊,我这中专水平的菜鸟都知道原理,从第三个数后面的数值都是前面两个数的和
作者: Novice.Jin    时间: 2015-1-18 19:44
几乎任何语言说到递归时都会用这个例子
作者: wdhm5423    时间: 2015-1-18 22:06
你是不懂生兔子为什么会变成斐波那契数列吧?
这样子理解:设第n个月的兔子对数为f(n),他是不是等于前一个月的兔子f(n-1)加上新生的兔子。已经第三个月的兔子才会新生一对,现在只要知道已经第三个月的兔子有多少,是不是就能知道新生的兔子,也就是已经三个月的兔子=这次新生的兔子。对于第n个月有多少三个月的兔子,是不是看第n-2个月的兔子有多少,到了第n个月就是已经三个月的兔子,那就是f(n-2)咯。所以f(n)=f(n-1)+f(n-2)

你的fun(n)函数返回值就是这里的f(n),等于f(n-1)+f(n-2),也就是函数fun(n-1)的返回值+函数fun(n-2)的返回值,return fun(n-1)+fun(n-2)。给初始的兔子数,也就是fun(1)的时候返回 1,fun(2)的时候返回1,就是if里的内容。




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