猴子吃桃子的问题
1、问题背景
有只猴子第一天摘了若干桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下桃子的一半还多一个。到第10天早上想再吃时,就只剩下一个桃子了。问:这只猴子第一天共摘了多少个桃子?
2、解题思路
采用逆向思维,由后往前推,递归思想
3、解决办法
(1)直接推断
第十天:1
第九天:4
第八天:10
第七天:22
第六天:46
第五天:94
第四天:190
第三天:382
第二天:766
第一天:1534
(2)数学方法
运用递归方法
S10=1
S9=2(S10+1)
S8=2(S9+1)
...
Sn=2Sn+1 +2
S1=2^9*S+2^9+......+2
=512+512+256+128+64+32+16+8+4+2=1534
(3)Java代码实现
/** * * @title:MonkeyPeach.java * @Package:com.you.hbxs.model * @Description:<h3>猴子吃桃问题</h3> * @author:游海东 * @date:2016-2-27下午5:59:44 * @version V1.0 * */ package com.you.hbxs.model; /** * * 项目名称:HBXS * 类名称:MonkeyPeach * 类描述: * 创建人:游海东 * 创建时间:2016-2-27下午5:59:44 * 修改人:游海东 * 修改时间:2016-2-27下午5:59:44 * 修改备注: * @version V1.0 * */ public class MonkeyPeach { /** * * 方法名:getPeachNum * 方法类型:MonkeyPeach * 参数:@param days * 参数:@param peach * 参数:@return * @return :int * @throws */ public static int getPeachNum(int days,int peach) { if(days == 1) { return peach; } else { days--; peach = (peach+1)*2; return getPeachNum(days,peach); } } /** * * 方法名:main * 方法类型:MonkeyPeach * 参数:@param args * @return :void * @throws */ public static void main(String[] args) { int peachNum = getPeachNum(10, 1); System.out.println("桃子的个数:"+peachNum); } }
原文:http://blog.csdn.net/you23hai45/article/details/50756293