问题
猴子第一天摘下若干个桃子,当即吃了一半又多一个,第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上时,只剩下一个桃子了。求第一天共摘多少桃子?
分析
设day(n)为第n天早上的桃子,也即是n-1天剩下的桃子。那么有
day(10)=1
day(9) = [day(10) + 1] x 2
……
day(n) = [day(n-1) + 1] x 2
可以用递归或循环处理这个问题.。
代码
递归
#include <stdio.h>
int day(int d)
{
if (d == 10)//结束条件:第十天为1
return 1;
else if (d < 10)
return (day(d + 1) + 1) * 2;
}
int main()
{
int a;
for (int i = 1; i <= 10; i++)
{
a = day(i);//昨天剩下的
printf("第%d天早上 %d\n", i, a);
}
return 0;
}
循环
#include <stdio.h>
int main()
{
int b = 1;
for (int day = 10; day > 1; day--)
{
printf("第%d天 %d\n", day,b);
b = (b + 1) * 2;
}
printf("第1天 %d\n", b);
return 0;
}