【发布时间】:2022-12-25 22:42:18
【问题描述】:
请理解以下程序:
function recur(n, cur) {
if (!cur) {
cur = 0;
}
if (n < 2) {
throw new Error('Invalid input');
}
if (n === 2) {
return 1 / n + cur;
}
return recur(n - 1, cur + 1 / (n * (n - 1)));
}
防止生产系统中的无限循环。写一个程序做同样的事情 没有递归的计算。请注意,还考虑了 while 循环 在生产系统中不好。
我不太明白原始代码应该做什么:(
【问题讨论】:
-
如果我错了请纠正我,但你的
recur不能陷入无限循环。 -
假设您的第一个参数 (
n) 是一个数字,任何n < 2都会抛出错误,而任何n > 2最终都会得到 2,因为递归函数是用n - 1作为第一个参数调用的。因此,它终止。那么,这是您的问题(了解它终止的原因),还是您正在寻求帮助以在不递归的情况下重写它? -
是的,我正在寻求帮助以在不递归的情况下重写它:)
-
@GerardoFurtado
n = Infinity是一个特例,它会不是最终达到 2 但导致无限循环。 -
@OskarGrosser 恐怕它没有被处理,检查
cur,但我们正在谈论n。
标签: javascript