这个递归如何优化?

发布于 2022-09-12 03:19:22 字数 352 浏览 26 评论 0

在做 LeetCode 62题 时第一直觉是下面这个递归,但是这个递归问题太大了,很容易栈溢出,能否优化?或是此题不宜用递归解,得转换成循环?

var uniquePaths = function(m, n) {
  if (m === 1 || n === 1) {
    return 1
  }
  return uniquePaths(m - 1, n) + uniquePaths(m, n - 1)
};
uniquePaths(100, 100);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

向地狱狂奔 2022-09-19 03:19:22

从我的仓库摘一个代码,应该可以解决你的问题。


var uniquePaths = function (m, n) {
  const dp = Array(n).fill(1);

  for (let i = 1; i < m; i++) {
    for (let j = 1; j < n; j++) {
      dp[j] = dp[j] + dp[j - 1];
    }
  }

  return dp[n - 1];
};

仓库地址: https://github.com/azl3979858...

々眼睛长脚气 2022-09-19 03:19:22

递归导致的栈溢出,可以通过将函数柯里化,然后优化函数尾调用的方法来解决。
ES6 标准里,浏览器实现箭头函数的时候必须部署尾调用优化,那么,柯里化的箭头函数尾调用来完成递归,就不会导致栈溢出了,可以专心优化算法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文