猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
可能题目讲的不是很清楚,容易误解,这里有着两个要点
- 前一天的桃子总数是后一天的数量加上1之后再乘以2
- 到第10天时,没有吃,就只剩下一个桃子
因此,如果要知道第9天有多少个桃子,就应该是(第10天的数量+1)X2是4个,依此类推
那么就可以使用递归写法
//递归写法
int get_Peaches(int day)
{
if (day==10)//只要不是第10天
{
return 1;
}
return (get_Peaches(day + 1) + 1) * 2;//前一天的桃子总数是后一天的数量加上1之后再乘以2
}
void main()
{
int peachNum = 0;
peachNum = get_Peaches(1);
printf("%d", peachNum);
}
这样不停的往回递推,就能够求出第一天有多少桃子,也就是桃子总数
常规写法
int get_Peaches()
{
int sum = 1;//第10天的桃子总数
for (int day = 9; day >=1; day--)//用逆序是为了便于理解
{
sum = (sum + 1) * 2;
}
return sum;
}
void main()
{
int peachNum;
peachNum = get_Peaches();
printf("%d", peachNum);
}