问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。求猴子第一天摘了多少个桃子。
思路
-
由题可知,前一天的桃子数等于第二天桃子数加 1 的 2 倍;
-
从后向前推出第一天摘的桃子数;
-
所以使用循环或则递归解决问题;
- 循环
main() { // i: 第几天; s: 第一天的桃子数量; n: 第十天的桃子数量 int i,s,n=1; for (i=1;i<10;i++) { s=(n+1)*2 n=s; } printf("第一天共摘了%d个桃\n",s); }
- 递归
// 计算第n天的数量 int count(int day) { // 当第十天时,剩下一个桃子 if(day == 10) { return 1; } // 第n天的桃子数量 = 第n+1天桃子数量+1的 两倍 return 2 * (count(day+1) + 1); } main() { int n = 0; n = count(1); printf("第一天共摘了%d个桃\n",n); }