题目:某人先后在五家商店用光了身上所有的钱,在每家商店,他花掉的钱是他进入这家商店时身上所带钱数的一半再加一元钱。
问题:他在进第一家商店时身上带了多少钱?
分析:假设他进入某家商店时身上钱数为X,离开时身上钱数为Y。则
X - (X/2 + 1) = Y
即:
X = 2 * (Y + 1)
现在已知离开第五家商店时Y == 0,则进入第五家商店时X = 2,这又恰好是他离开第四家商店时剩余的钱数...一次类推,可得到答案。
现在我们来用递归解决这个问题:
1. 递归出口:当他上身钱数为零时递归结束。
2. 迭代因子:将他进入的商店总数目作为这个递归的步进变量。
代码段如下:
private static int func(int i)
{
if (i <= 0)
{
return 0;
}
else
{
return 2 * (func(i - 1) + 1);
}
}