zoukankan      html  css  js  c++  java
  • 题四:一对兔子生兔子,给个月份算有几只兔子

    这个用递归就行,兔子就是个类,他们有自己的行为,这种思路可以帮助我们给兔子建立模型。

    免责声明:注意我就是随手一写,对算法效率有要求的慎用

    写法一:

    /**
     * 有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月又生一对兔子,加入兔子都不死,问每个月的兔子总数多少?
     *
     * 月份          1、2、3、4、5、6、7、8、9、10、11、12
     * 兔子对数:     1、1、2、3、5、8、13、21、34、55、89、144
     */
    
    public class Test4 {
        public static void main(String[] args) {
            RabbitPair rabbitPair = new RabbitPair(12);
            System.out.println(rabbitPair.getPairCount()*2);
        }
    
    }
    
    class RabbitPair{
        int month;
        public RabbitPair(int month){
            this.month = month;
        }
    
        public int getPairCount(){
         //这里的count代表自己这一对,每对兔子计算的时候都算上自己这一对,后边就不用再进行复杂的计算了
    int count = 1; if(month<3){ return count; }else{ //这几个月一共生了month-2对兔子,每对兔子都具有RabbitPair的getPaircount特性 for(int i=month-2;i>0;i--){ count+= new RabbitPair(i).getPairCount(); } return count; } } }

    写法二:

    当然上边的代码也可以精简,但是就显得不是那么平易近人了,因为你不能一下看出这个是怎么得到的,简化后:

    /**
     * 有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月又生一对兔子,假如兔子都不死,问每个月的兔子总数多少?
     *
     * 月份          1、2、3、4、5、6、7、8、9、10、11、12
     * 兔子对数:     1、1、2、3、5、8、13、21、34、55、89、144
     */
    public class Test4 {
        public static void main(String[] args) {
            int month = 12;
            System.out.println(getPairCount(month)*2);
        }
    
        public static int getPairCount(int month){
            int count = 1;
            if(month<3){
                return count;
            }else{
                for(int i=month-2;i>0;i--){
                    count+= getPairCount(i);
                }
                return count;
            }
        }
    }

    当然你可以当个数学家,

    推导出f(n)=f(n-1)+f(n-2),然后再写个更简单的递归实现;

    或者再进一步推导出,斐波那契数列通项公式:

    就看你是想充分利用计算机,还是想充分利用你自己的脑子了~

  • 相关阅读:
    虚函数
    class与struct的区别
    HTTP是什么连接
    长连接与短连接
    多线程的主要优点
    overload、override、overwrite的介绍
    常用的Linux命令
    IO模型——IO多路复用机制
    栈区与堆区的区别
    软链接和硬链接到底有啥区别
  • 原文地址:https://www.cnblogs.com/flying607/p/9004158.html
Copyright © 2011-2022 走看看