【问题标题】:prevent an infinite loop in a production system(Js Code Test question)防止生产系统中的无限循环(Js 代码测试问题)
【发布时间】: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 &lt; 2 都会抛出错误,而任何 n &gt; 2 最终都会得到 2,因为递归函数是用 n - 1 作为第一个参数调用的。因此,它终止。那么,这是您的问题(了解它终止的原因),还是您正在寻求帮助以在不递归的情况下重写它?
  • 是的,我正在寻求帮助以在不递归的情况下重写它:)
  • @GerardoFurtado n = Infinity 是一个特例,它会不是最终达到 2 但导致无限循环。
  • @OskarGrosser 恐怕它没有被处理,检查cur,但我们正在谈论n

标签: javascript


【解决方案1】:

这是没有递归的函数。

function nonRecur(n, cur) {
    if (!cur) {
        cur = 0;
    }
    if (n < 2) {
        throw new Error('Invalid input');
    }
    for (; n > 1; --n){
        if (n === 2) {
            cur = 1 / n + cur;
            break;
        }
        cur = cur + 1 / (n * (n - 1));
    }
    return cur
}

【讨论】:

  • 奥克你很棒
【解决方案2】:

你可以试试下面的代码

function recur(n, cur) {
 if (!cur) {
  cur = 0;
 }
 if (n < 2) {
  throw new Error('Invalid input');
 }
 for(var i = n; i > 2; i--){
    cur = cur+1/(i * (i -1));
 }
 return 1 / i + cur;
}

【讨论】:

    【解决方案3】:

    在python中,我们可以按照sn-p把这个递归问题转化为迭代。 。还有一个网站,您可以在其中目视检查递归过程Visualise Recursion process。我希望你会发现我的解决方案是完美的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-24
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多