问题描述:
关于题目的异议,不同题意,答案不同,下面两种说法:
(这道题目的关键就是看清楚第十天到底是怎样的一个情况)
描述一:1534个桃子
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,见只剩下一个桃子了。问最初有多少个桃子。
描述一代码:
递归:
#include <stdio.h>
int peach(int n) {
if (n == 10) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
#include <stdio.h>
void main() {
int i, s = 1;
for (i = 9; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
描述一反推:
第 1天有1534个桃子,猴子吃了一半多一个后剩余: 766个桃子。
第 2天有 766个桃子,猴子吃了一半多一个后剩余: 382个桃子。
第 3天有 382个桃子,猴子吃了一半多一个后剩余: 190个桃子。
第 4天有 190个桃子,猴子吃了一半多一个后剩余: 94个桃子。
第 5天有 94个桃子,猴子吃了一半多一个后剩余: 46个桃子。
第 6天有 46个桃子,猴子吃了一半多一个后剩余: 22个桃子。
第 7天有 22个桃子,猴子吃了一半多一个后剩余: 10个桃子。
第 8天有 10个桃子,猴子吃了一半多一个后剩余: 4个桃子。
第 9天有 4个桃子,猴子吃了一半多一个后剩余: 1个桃子。
到第10天早上想再吃时,见只剩下1个桃子了。
描述二:3070个桃子
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。第十天同样是吃了前一天的一半加一个,最后剩下一个桃子。问最初有多少个桃子。
描述二代码:
递归:
#include <stdio.h>
int peach(int n) {
if (n == 11) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
#include <stdio.h>
void main() {
int i, s = 1;
for (i = 10; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
描述二反推:
第 1天有3070个桃子,猴子吃了一半多一个后剩余:1534个桃子。
第 2天有1534个桃子,猴子吃了一半多一个后剩余: 766个桃子。
第 3天有 766个桃子,猴子吃了一半多一个后剩余: 382个桃子。
第 4天有 382个桃子,猴子吃了一半多一个后剩余: 190个桃子。
第 5天有 190个桃子,猴子吃了一半多一个后剩余: 94个桃子。
第 6天有 94个桃子,猴子吃了一半多一个后剩余: 46个桃子。
第 7天有 46个桃子,猴子吃了一半多一个后剩余: 22个桃子。
第 8天有 22个桃子,猴子吃了一半多一个后剩余: 10个桃子。
第 9天有 10个桃子,猴子吃了一半多一个后剩余: 4个桃子。
第10天有 4个桃子,猴子吃了一半多一个后剩余: 1个桃子。