古典問題:有一對兔子,從出生后第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));
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 有一對兔子,從出生后第3個月起每個月都生一對兔子, 小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?python實現 Java有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 有一對兔子,從出生后第3個月起每個月都生一對兔子, 小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死, 問每個月的兔子總數為多少? 有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?    有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問第n個月的兔子對數為多少? 古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?(python語言) 【JAVA習題一】古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一 對兔子,假如兔子都不死,問每個月的兔子總數為多少?
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM