猴子吃桃子的问题


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);
}

}