• 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四 个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?


    这是斐波那契数列,规律是:从第三个数开始,每个数都是前两个数的合.

    是的,最简单的方法就是递归,

    package com.mh.basic.one;
    
    public class Recursion {
    
        
        public static int f(int i){
            if( i == 1  || i == 2 ){
                return 1;
            }
            
            else{
                return f(i-1) + f(i-2);
            }
        }
        
        public static void main(String[] args) {
            
            System.out.println(Recursion.f(20));
        }
        
        
        
    }

    这种是面向过程式的编程,java是一种面向对象的语言,我们能不能使用面向对象的思想解决这个问题呢?答案是肯定的

    package com.mh.basic.one;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    //创建一个兔子类
    public class Rabbit {
    
        private int age ;//有一个属性age,用来记录年龄(按月计算)
        
        private static List<Rabbit> list = new ArrayList<Rabbit>(Arrays.asList(new Rabbit(1)));//定义一个"兔子窝",兔子窝中本来就有一对兔子
        
        public Rabbit(int age){//构造方法
            this.age = age;
        } 
        
        public static Rabbit birth(){//兔子有生小兔子的行为
            return new Rabbit(1);
        }
        
    
        public static int getSize(List<Rabbit> list){//获得兔子窝中的兔子总量
            return list.size();
        }
        
        
        public static int countRabbits(int month){//计算给定月份兔子窝中应有多少兔子
            
            if( month == 1 || month == 2) {
                
                return 1;
                
            }else{
                    list.get(0).age = 3;
                }
                
            
            Rabbit curr_Rabbit = null;
            
            for(int i = 3 ; i <= month ; i++){//从三月份开始
                
                for(int j = 0; j < list.size(); j++){
                    
                    curr_Rabbit = list.get(j);
                    
                    if(curr_Rabbit.age >= 3){//如果年龄大于等于三个月,可以生兔子
                        
                        list.add(birth());
                    }
                    
                    curr_Rabbit.age++;//不然年龄加1
                }
            }
            return getSize(list);
        }
    
        
        public static void main(String[] args) {
            System.out.println(Rabbit.countRabbits(20));
        }
    }
  • 相关阅读:
    IDEA导入外部jar包步骤
    将本地新建工程推到git上
    【转】Memcached与Redis有什么区别
    Redis
    JavaScript-Tool-lhgDialog-js:lhgdialog.js
    信息安全-HTTP:HTTP 身份验证
    信息安全-HTTP:HTTP访问控制(CORS)
    JavaScript-Tool-lhgDialog:框架示例
    JavaScript-Tool-lhgDialog:动画示例-源代码
    JavaScript-Tool-lhgDialog:动画示例
  • 原文地址:https://www.cnblogs.com/hui-8-ma/p/6719608.html
Copyright © 2020-2023  润新知