【发布时间】:2018-06-27 04:16:18
【问题描述】:
问题是返回概率,如果您从 10,000 开始并且需要达到 20,000,并且您每次下注 1,000(达到 20,000 的概率在您达到 0 之前)。您有 50-50 的输赢变化。
public static double roulette( double start, double end, double bet) {
if (start >= end) return 1;
if (start <= 0) return 0;
return .5*roulette(start+2*bet,end,bet) + .5*roulette(start-bet,end,bet);
}
但它会陷入无限循环,因为一些递归调用将重新开始。就像我打了一个 start = 11,000 的电话,它会回到 10,000 并创建一个循环。我该如何防止这种情况?
【问题讨论】:
-
您的程序是否为较小的输入返回正确的概率?对于限制说 1000 - 2000 ?
-
解决方案必须是递归的吗?
-
我建议尝试使用调试器单步执行您的代码,或者添加打印语句,以便您了解实际发生的情况。这里的任何人都很难仅根据问题来调试您的代码。
-
是的,这适用于任何不返回原始函数的递归调用。假设 start = 100, end = 200, bet = 50。那么它将调用 200 并返回 1,然后在 150 上,它可以完成 +100 调用并返回 1,但随后它将达到 150-50 = 100从一开始就卡住了。
-
OP 解释了代码的确切问题 -
roulette(10000, 20000, 1000)调用roulette(11000, 20000, 1000)调用roulette(10000, 20000, 1000)。因此无限循环。
标签: java recursion infinite-loop probability