问题遇到的现象和发生背景
归并排序提示我超出最大调用栈应该是无限回调了,逻辑哪里出问题了
问题相关代码,请勿粘贴截图
let arr = [1, 5, 8, 7, 3, 9];
let i = 0;
let j = arr.length - 1;
function fn(arr, i, j) {
if (arr == null || arr.length < 2) {
return;
}
merge(arr, i, j);
}
function merge(arr, i, j) {
if (i == j) {
return;
}
let mid = i + (j - i) / 2;
merge(arr, i, mid);
merge(arr, mid + 1, j);
f1(arr, i, mid, j);
}
function f1(arr, i, mid, j) {
var newArr = [];
let p1 = i;
let p2 = mid + 1;
while (p1 <= mid && p2 <= j) {
arr[p1] < arr[p2] ? newArr.push(arr[p1++]) : newArr.push(arr[p2++]);
}
while (p1 <= mid) {
newArr.push(arr[p1++]);
}
while (p2 <= j) {
newArr.push(arr[p2++]);
}
}
fn(arr, i, j);
运行结果及报错内容
merge(arr, i, mid);
^
RangeError: Maximum call stack size exceeded
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)
at merge (C:\Users\lya\Desktop\bukajiaoyuu\杂项\06.归并排序.js:16:3)