归并排序提示我超出最大调用栈应该是无限回调了,可以帮我看看逻辑哪里出问题了不

归并排序提示我超出最大调用栈应该是无限回调了,可以帮我看看逻辑哪里出问题了不

问题描述:

问题遇到的现象和发生背景

归并排序提示我超出最大调用栈应该是无限回调了,逻辑哪里出问题了

问题相关代码,请勿粘贴截图
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)

我的解答思路和尝试过的方法
我想要达到的结果

没看懂你想干啥。。

没有执行这里,所以会一直循环

img