古典問題:有一隻大兔子,大兔子每個月生一隻小兔子,第二個月小兔子會長成大兔子,假如兔子都不死,問第N個月的兔子總數爲多少?
解法一、循環
1 public long sumRubbit1(int n){ 2 long total = 0; //兔子總數 3 int big = 1; //大兔子總數 4 int middle = 0; //中兔子總數 5 int little = 0; //小兔子總數 6 if(n==1){ 7 total = big; 8 }else if(n==2){ 9 little = big; 10 total = big+little; 11 }else{ 12 little = big; 13 int beforMiddle =0; //上個月的中兔子總數 14 for(int i=3;i<=n;i++){ 15 beforMiddle = middle; 16 middle = little; //中兔子數=上月小兔子數 17 little = big; //小兔子數=上月大兔子數 18 big = big +beforMiddle; //大兔子數=上月大兔子數+上月中兔子數 19 total = big+middle+little; 20 } 21 } 22 return total; 23 }
解法一思路如下:
解法二、遞歸
1 public long sumRubbit2(int n){ 2 long total = 0; //兔子總數 3 if(n==1){ 4 total = 1; 5 }else if(n==2){ 6 total = 2; 7 }else if(n==3){ 8 total = 3; 9 }else{ 10 total = sumRubbit2(n-1)+sumRubbit2(n-3); 11 } 12 return total; 13 }
解法二思路如下:如下例子