while改递归 Uncaught RangeError: Maximum call stack size exceeded

发布于 2022-09-12 01:55:05 字数 895 浏览 20 评论 0

问题描述

while方法 数据多大都能通过。
但是改成递归 执行数据特别大的时候会报错:
例如:lastRemaining(70866,116922) 会报》》 Uncaught RangeError: Maximum call stack size exceeded

请问是因为数据大 导致递归超过了最大堆栈量(堆栈溢出) ,还是递归的时候哪写错了

//while方法代码
var lastRemaining = function(n, m) {
    let arr = [];
    for (let i=0;i<n;i++){arr.push(i)}

    let start = 0;//开始位置
    while (arr.length > 1) {
        start = (start + m - 1) % arr.length;
        arr.splice(start, 1); // 删除元素
    }
    return arr[0];
};

//递归方法代码  
var lastRemaining = function(n, m) {
    let arr = [];
    for (let i=0;i<n;i++){arr.push(i)}

    let start = 0;//开始位置
    (function delete_fn(){
        if(arr.length > 1){
            start = (start + m - 1) % arr.length;
            arr.splice(start, 1); // 删除元素
            delete_fn();
        }
    })()
    return arr[0];
};

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

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

发布评论

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

评论(1

内心荒芜 2022-09-19 01:55:05

用递归时会遇到栈溢出的问题,所以递归并不是万能药水,避免栈溢出的问题,就可以使用while循环。

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