1、題目描述
喜歡西游記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究一個數學問題!什么問題?他研究的問題是蟠桃一共有多少個!不過,到最后,他還是沒能解決這個難題,呵呵^-^當時的情況是這樣的:第一天悟空吃掉桃子總數一半多一個,第二天又將剩下的桃子吃掉一半多一個,以后每天吃掉前一天剩下的一半多一個,到第n天准備吃的時候只剩下一個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?
2、代碼實現
1 package com.wcy.october; 2 3 /** 4 * 時間:2016年10月23日 5 * Problem Description 6 * 喜歡西游記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究一個數學問題!什么問題?他研究的問題是 7 * 蟠桃一共有多少個!不過,到最后,他還是沒能解決這個難題,呵呵^-^當時的情況是這樣的:第一天悟空吃掉桃子總數一半多一個,第二天又將剩下的桃子吃掉一半 8 * 多一個,以后每天吃掉前一天剩下的一半多一個,到第n天准備吃的時候只剩下一個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢? 9 * Input 10 * 輸入數據有多組,每組占一行,包含一個正整數n(1<n<30),表示只剩下一個桃子的時候是在第n天發生的。 11 * Output 12 * 對於每組輸入數據,輸出第一天開始吃的時候桃子的總數,每個測試實例占一行。 13 * Sample Input 14 * 2 15 * 4 16 * Sample Output 17 * 4 18 * 22 19 */ 20 public class RecursionTest4 { 21 22 /** 23 * 獲取每一天吃蟠桃的數目,我們以逆向思維來看 24 * @param number 第number天 25 * @return 吃的蟠桃數目 26 */ 27 public static int getResult(int number){ 28 if (number == 1) { 29 return 1; 30 }else if (number == 2) { 31 return 3; 32 }else { 33 return getResult(number-1)*2; 34 } 35 } 36 37 /** 38 * 求總的蟠桃數目 39 * @param number 一個number天吃完 40 * @return 總的蟠桃數目 41 */ 42 public static int getResultValue(int number){ 43 int result = 0; 44 for (int i = 1; i <= number; i++) { 45 result += getResult(i); 46 } 47 return result; 48 } 49 50 /** 51 * 用戶頁面測試 52 * @param args 53 */ 54 public static void main(String[] args) { 55 int result = getResultValue(4); 56 System.out.println(result); 57 } 58 }
