猴子吃桃子的问题
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);
}
}