Java:利用遞迴方法求鴨子數
阿新 • • 發佈:2018-11-19
問題描述:
一個人趕著鴨子去每個村莊賣,每經過一個村子賣去所趕鴨子的一半又一隻。這樣他經過了七個村子後還剩兩隻鴨子,問他出發時共趕多少隻鴨子?經過每個村子賣出多少隻鴨子?
題目分析:
設經過第n個村子時有count(n)只鴨子,賣去count(n)/2+1只鴨子,剩下count(n+1)只鴨子,則有count(n)=count(n)/2+1+count(n+1),即count(n)=2*(count(n+1)+1)。經過了七個村子後還剩兩隻鴨子,即count(8)=2。因此出發時共趕count(1)只鴨子,經過第n個村子時賣出count(n)/2+1只鴨子。
演算法構造:
function(n){
count(n)=2*(count(n+1)+1) ,1<=n<8;
count(n)=2 , n=8
}
實現程式碼如下:
package com._520it; /** * 計算鴨子的數量 * @author Jack * @date 2018-11-16 * @version 1.0 */ public class Duck { public static void main(String[] args) { // 獲取出發時鴨子總數 int result = saleDuck(0); // 對經過的村子所賣出的鴨子計數 int count = 0; System.out.println("出發時共趕" + result + "只鴨子!"); for (int index = 1; index <= 7; index++) { // 經過村子時所賣出的鴨子數 int ducks = result / 2 + 1; count += ducks; // 更新剩餘鴨子數 result = 510 - count; if(index != 7){ System.out.println("經過第" + index + "個村子,賣出" + ducks + "只鴨子,還剩餘" + (510 - count) +"只鴨子,"); }else { System.out.println("經過第" + index + "個村子,賣出" + ducks + "只鴨子,還剩餘" + (510 - count) +"只鴨子。"); } } } /** * 計算出發時所趕鴨子的總數 * @param num 經過的村子數 * @return 出發時鴨子的總數 */ public static int saleDuck(int num) { // 經過第7個村子後剩餘2只鴨子 if (num == 7) { return 2; } else { return 2 * (saleDuck(num + 1) + 1); } } }
執行效果如下: