A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhou1234 中级黑马   /  2015-1-18 16:50  /  1913 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

古典问题:有一对兔子,从出生后第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);
        }
}
不懂原理啊

7 个回复

倒序浏览
第一对兔子从第二个月开始每个月都生一对兔子,到第 n 个月 生了 n-2 对兔子‘
第五个月开始又有一对兔子开始是生了小兔了,到第那个月共生了n-4个兔子
回复 使用道具 举报
xuexi#在这#里快速不懂学习
回复 使用道具 举报
最近铺天盖地都是兔子
回复 使用道具 举报
这是方法递归,后面数等于前两个数的和
回复 使用道具 举报
斐波那契数列啊,我这中专水平的菜鸟都知道原理,从第三个数后面的数值都是前面两个数的和
回复 使用道具 举报
几乎任何语言说到递归时都会用这个例子
回复 使用道具 举报
你是不懂生兔子为什么会变成斐波那契数列吧?
这样子理解:设第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里的内容。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马