请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师为什么我会报错?

我照着视频敲得代码,执行后报错“超出最大调用堆栈大小"”,这是为什么:
图片描述图片描述

正在回答 回答被采纳积分+3

4回答

纯情掉了一地 2021-09-10 08:55:19

left 或者 right 数组长度可能会为 0 ,所以  
```js

if(arr.length === 1) return arr  

需要改成
if(arr.length < 2) return arr 

```

5 回复 有任何疑惑可以回复我~
  • 正解nice
    回复 有任何疑惑可以回复我~ 2021-10-15 07:14:45
dist 2021-09-10 01:32:21

Array.prototype.quickSort = function () {

    const rec = (arr) => {

        if (arr.length < 2) {

            return arr;

        }

        const left = [];

        const right = [];

        const mid = arr[0];

        for (let i = 1; i < arr.length; i++) {

            if (arr[i] < mid) {

                left.push(arr[i])

            } else {

                right.push(arr[i]);

            }

        }

        return [...rec(left), mid, ...rec(right)];

    }

    const res = rec(this);

    res.forEach((n, i) => {

        this[i] = n

    });

    return res;

}


const arr = [2, 3, 99, 5, 6];

let sortArr=arr.quickSort();

console.log(sortArr);


1 回复 有任何疑惑可以回复我~
lewis 2021-10-15 15:22:05

在循环处加一个debugger,断点调试一下

0 回复 有任何疑惑可以回复我~
lewis 2021-07-29 21:23:17

出现了死循环,你在所有循环处加一个断点看看

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_慕运维6460539 #1
    我也知道是递归死循环了,看不出怎么修改,我以为是自己问题,就照着视频重新敲的,还是报错,老师能不能看看代码具体错在哪里?
    回复 有任何疑惑可以回复我~ 2021-07-29 21:30:10
  • lewis 回复 提问者 qq_慕运维6460539 #2
    所以我让你加个断点看下,从哪个逻辑开始死循环的
    回复 有任何疑惑可以回复我~ 2021-09-10 12:03:32
  • 小星星724 回复 lewis #3
    if (arr.length <= 1) return arr
    回复 有任何疑惑可以回复我~ 2021-10-15 15:21:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信