【需求/说明】: 一只猴子摘了一堆桃子,每天吃掉其中的一半然后再多吃一个,第二天则吃剩余的 一半然后再多吃一个,...直到第10天,猴子发现只有一个桃子了。问这只猴子在第一天摘了多少个桃子?
【需求分析】:这只猴子共用了10天吃桃子,最后一天剩余1个桃子,要想求出第一天的桃子数,就要先求出第2天剩余的桃子数,...。假设an表示第n天剩余的桃子数量,n=1~10,则有如下关系:
a1=(a2+1)x2;
a2=(a3+1)x2;
......
a9=(a10+1)x2;
a10=1;
从上述式子可知,只能通过倒推来求得第一天的桃子数。这在程序上就需要借助于递归算法。
那么我们就可以编写一个算法用于计算猴子吃桃问题。算法的示例代码如下:
1 /** 2 * 3 */ 4 package edu.aeon.algorithm; 5 6 import java.util.Scanner; 7 8 /** 9 * @author work 10 * 创建于: 2017年10月17日 下午6:51:56 11 * by lzj 12 * 需求/说明: 13 * 某天一只猴子摘了一堆桃子,每天吃掉其中的一半然后再多吃一个,第二天则吃剩余的 14 * 一半然后再多吃一个,...直到第10天,猴子发现只有一个桃子了。问这只猴子在第一 15 * 天摘了多少个桃子? 16 */ 17 public class MonkeyEatPeaches { 18 //定义一个算法 19 /** 20 * 21 * at 2017年10月17日 下午6:57:55 by lzj 22 * @parameters1 int n 23 * @return int 24 */ 25 private static int peache(int n) { 26 return n > 1 ? (peache(n-1)+1)*2:1; 27 } 28 /** 29 * at 2017年10月17日 下午6:51:56 by lzj 30 * @parameters1 String[] args 31 * @return void 32 */ 33 public static void main(String[] args) { 34 Scanner scan; 35 do { 36 System.out.println("请输入猴子吃桃的总天数:"); 37 scan=new Scanner(System.in); 38 if(scan.hasNextInt()) { 39 System.out.println("猴子总共摘了:"+peache(scan.nextInt())+"个桃子!"); 40 } else { 41 System.out.println("输入错误!退出程序!"); 42 return; 43 } 44 }while(true); 45 } 46 }
运行结果截图附上: