悟空偷吃蟠桃的故事
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 }