编程 猴子吃桃问题 猴子第一天摘下若干个桃子当机吃了一半还不过瘾又吃了一个 以后每天早

2020-11-05 教育 122阅读

先分析问题:用逆向思维来思考它,根据题意“ 以后每天早上吃前天剩下的一半零一个 ”,则我们可以用逆向思维来推导它,即从第十天往前推。已知第十天有一个,根据题意第九天应该就是(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<}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com