這是斐波那契數列,規律是:從第三個數開始,每個數都是前兩個數的合.
是的,最簡單的方法就是遞歸,
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)); } }
