Java問題抽象和遞迴(母羊生母羊問題為例)

來源:互聯網
上載者:User

問題:

  一頭母羊的壽命是5年,它會在第2年底和第4年底各生下一頭母羊,第5年底死去,問一開始農場有1頭母羊,N年後,農場會有多少只母羊?

解析1)

  這道題不用刻意的去注意它的邏輯,也不用傷腦筋的去挖掘它暗藏著什麼公式,只要按人的正常生活和自然規律理解一下就行了。
  首先虛擬一隻母羊,這隻母羊只有一個屬性,就是年齡:

class Sheep {
public int age = 0; // 預設一隻新羊的年齡為0
}

  然後這個人有一個計數器,來計算N年後牧場羊的個數。這個計數器的工作原理是:以年為單位開始計算,每經過一年,迴圈牧場所有的羊:
  (1)使羊的年齡加1,
  (2)如果母羊今天2歲了或是4歲了,就讓它生一隻小羊,
  (3)如果母羊今年5歲了,就讓他過世,並清理牧場

    // n為過的年數
public static int getSheeps(int n) {
// sheeps表示整個羊的生態圈
ArrayList<Sheep> sheeps = new ArrayList<Sheep>();
sheeps.add(new Sheep());

List<Sheep> addSheeps = new ArrayList<Sheep>();//待添加到生態圈的新羊
List<Sheep> delSheeps = new ArrayList<Sheep>();//待從生態圈刪除的羊

for (int i = 1; i <= n; i++) {
for (Sheep s : sheeps) {
s.age++;
if (s.age==2||s.age==4) {// 羊仍存活
addSheeps.add(new Sheep());
} else if(s.age==5){ // 羊死亡,加入刪除列表delSheeps中,等待刪除
delSheeps.add(s);
}
}

sheeps.addAll(addSheeps);
sheeps.removeAll(delSheeps);
addSheeps.clear();//清空addSheeps
delSheeps.clear();//清空待刪除列表中的元素
}

return sheeps.size(); // 最後總羊數即羊生態圈中的羊數目
}

解析2)

  凡是碰到“一生二、二生三、三生萬物”的問題,無疑用遞迴演算法(順便和斐波那契數列聯絡起來)。下面是一個完整的代碼:

public class MyMain{

public static int get(int year)
{
int num=1; //The initial sheep number

for(int i=1; i<=year; i++){
if(i==2){
num+=get(year-2);
}else if(i==4){
num+=get(year-4);
}else if(i==5){
num--;
}
}

return num;
}

public static void main(String[] args) {
String line1="";
String line2="";
for(int i=1;i<=18;i++){
line1+="第"+i+"年"+" ";
line2+=get(i)+" ";
}
System.out.println(line1);
System.out.println(line2);
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.