猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
这是一个经典的逆向递推问题。题目描述了猴子每天吃桃的规律:每天吃掉前一天剩余桃子的一半再加一个。已知第 10 天早上只剩 1 个桃子,要求反推出第 1 天摘了多少桃子。
由于正向计算需要未知初始值,而逆向推理可以从已知的第 10 天状态(1 个桃子)出发,逐日倒推前一天的桃子数量。
设第 天早上的桃子数为,则根据题意有: 变形可得逆推公式:
从第 10 天()开始,连续逆推 9 次即可得到第 1 天的桃子总数。
第一天共摘1534第 10 天早上:1 个
第 9 天早上:
第 8 天早上:
第 7 天早上:
…
每次逆推都是对当前数量加 1 后再乘以 2
共需逆推 9 次(从第 10 天回到第 1 天)
该过程体现了逆向思维在算法设计中的巧妙应用:当正向逻辑依赖未知初值时,从已知终态反推往往更高效简洁。
public class Demo17 {
public static void main(String[] args) {
int sum = 1; // 第10天早上的桃子数
for (int i = 0; i < 9; i++) { // 从第10天倒推到第1天,共9步
sum = (sum + 1) * 2;
}
System.out.println("第一天共摘" + sum);
}
}“猴子吃桃问题”是中国小学奥数和编程入门中常见的递推 / 递归类题目,强调逆向思维的重要性。
类似的问题还有“井底之蛙爬井”、“银行复利倒算本金”等。