猴子第一天摘下若干桃子吃,当即吃了一半,还不过瘾,又多吃了一个,第二天又将剩下的桃子吃掉一半,然后又多吃一个。以后每天都吃了前一天剩下的一半,再加一个。到第十天。当猴子想吃时,发现只剩下一个桃子。求第一天共摘下多少桃子?
思路:
已知第十天的桃子数量:f(10)=-1=1
已知第九天的桃子数量:f(9)=-1
.......
已知第一天的桃子数量:f(1)=-1
递归代码如下:
int peach(int n) { if (n == 10) return 1; else return 2 * (peach(n + 1) + 1); //f(9)=2[f(10)+1] } int main() { for (int i = 1; i <= 10; i++) { printf("第%d天有%d个桃子n", i, peach(i)); } }
由于本题的数量较小,所以也可以使用for循环一点点算出第一天的桃子数量
代码如下:
int main() { int p = 1, i; printf("第10天有%d个桃子n", p); for (i = 9; i >= 1; i--) { p++; p = p * 2; printf("第%d天有%d个桃子n", i, p); } return 0; }