黑马程序员技术交流社区

标题: 50道经典题之兔子问题面向对象编程 [打印本页]

作者: leojr    时间: 2016-11-1 16:31
标题: 50道经典题之兔子问题面向对象编程
本帖最后由 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);
        }
}*/


作者: yuzt    时间: 2016-11-1 16:33
顶一下!!!
作者: 默默默默    时间: 2016-11-1 17:29
不死神兔,这些逻辑都好强大,一时半会难理解

作者: leojr    时间: 2016-11-1 17:36
默默默默 发表于 2016-11-1 17:29
不死神兔,这些逻辑都好强大,一时半会难理解

我用面向对象思想实现以后发现可以考虑兔子的死亡了把兔子拉下神坛





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