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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 leojr 于 2016-11-1 16:32 编辑

[Java] 纯文本查看 复制代码
/*
斐波那契数列:
兔子问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
问每个月的兔子对数为多少?
*/
/*
分析:
常规的思想是用数学上的斐波那契数列通过递归的方法来实现的。下面的程序一(Prog1)
就是利用斐波那契数列的规律递归调用,来解决数量的问题。
但是,这种方法太过于理想化在遇到实际问题时,比如兔子如果会死,这个方法显然无法
应付相应情况。
故而,本人利用了面向对象的方法进行递归套用,同样解决了这一问题,并且可扩展性更强。
但是有一个较大的弊端为创建对象较多运行速度稍慢。但优点也很明显就是能计算兔子死这种
情况下的兔子总数

*/
public class Q1RabbitQuestion{
        public static void main(String[] args){
                //这里只需要创建一个可以生兔子的兔子即可
                DoubleRabbit r = new DoubleRabbit();
                //开始生兔子,传入想知道个数的月数,打印总数
                System.out.println("第30个月兔子总数为:"+r.born(30));
        }
}
/*
定义一个一对兔子的类,兔子对象的功能就是生小兔子和输出给定月数小兔子的总数。
所以它需要有一个count成员变量来存放兔子总数,一个born方法来生小兔子。
*/
class DoubleRabbit{
        //用来存放兔子总数(第一个兔子算一个)
        private int count = 1;
        //生小兔子方法
        public int born(int monthNum){
                for(int i=1; i<=monthNum; i++){
                        //三个月后才开始生小兔子,以后每个月生一个
                        if(i>=3){
                                //创建一个小兔子对象
                                DoubleRabbit doubleR = new DoubleRabbit();
                                //doubleR兔子生兔子,并返回doubleR兔子所生兔子总数(包括它自己)
                                //这里参数monthNum-i+1之所以要+1是因为,在第三个月后,子兔子已经生了一个月了
                                count += doubleR.born(monthNum-i+1);
                        }
                }
                //周期结束后返回兔子总数。
                return count;
        }
}

/*
Prog1是纯斐波那契数列的使用方法
*/
/*class Prog1{
        public static void main(String[] args){
                int n = 30;
                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);
        }
}*/

3 个回复

倒序浏览
顶一下!!!
回复 使用道具 举报
不死神兔,这些逻辑都好强大,一时半会难理解
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
默默默默 发表于 2016-11-1 17:29
不死神兔,这些逻辑都好强大,一时半会难理解

我用面向对象思想实现以后发现可以考虑兔子的死亡了把兔子拉下神坛
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马