先分析问题:用逆向思维来思考它,根据题意“ 以后每天早上吃前天剩下的一半零一个 ”,则我们可以用逆向思维来推导它,即从第十天往前推。已知第十天有一个,根据题意第九天应该就是(1+1)*2=4个,第八天应该就是(4+1)*2=10, 第七天应该就是(10+1)*2=22, 第六天应该就是(22+1)*2=46,
依此类推,直至第1天应该就是第2天(766+1)*=1534个桃子,即猴子第一天摘了1534个桃子。
为了验证这个推导的正确性,你可以按正常逻辑来把它(即此时由前往后)推导,即由第一天1534个桃子,第二天就是1534/2-1=766个桃子,依此类推,直至第十天,那么猴子此时就会发现只剩一个。
至此,我们由了推导的思想,再来编写的代码,就是小菜一碟的事情啦,实现的它方式无非就是那么两种,一种是简单的for循环,另一种是递归。这里我采用递归,因为解决此类问题往往用递归来思考它,会让问题变得更简单。按照数学思维来说 就是求未知数,则可以根据已知数出发进行求解(那么这里的已知数已经告诉了我们,它说第十天只有一个桃子)。
下面是我的递归算法来求解它的方法:
#include
using namespace std;
int recurrent_monkey(int days) //猴子吃桃递归
{
int peach;
if (days==10) peach=1; // 递归出口条件 (已知条件第10天只有一个桃子)
else peach=(recurrent_monkey(days+1)+1)*2;
return peach;
}
int main()
{
int days=1;
cout<}