Javascript JS Mergesort重载堆栈的问题
所以,我有这个mergeSort算法,但似乎无法在JS中运行。当我尝试运行它时,超过了最大调用堆栈,我无法找出原因。任何帮助都将不胜感激Javascript JS Mergesort重载堆栈的问题,javascript,Javascript,所以,我有这个mergeSort算法,但似乎无法在JS中运行。当我尝试运行它时,超过了最大调用堆栈,我无法找出原因。任何帮助都将不胜感激 export const doMergeSort = (array) => { const mergeSort = arr => { let mid = Math.floor(arr.length / 2), left = mergeSort(arr.slice(0, mid)),
export const doMergeSort = (array) => {
const mergeSort = arr => {
let mid = Math.floor(arr.length / 2),
left = mergeSort(arr.slice(0, mid)),
right = mergeSort(arr.slice(mid));
return merge(left, right);
};
const merge = (arr1, arr2) => {
let sorted = [];
while (arr1.length && arr2.length) {
if (arr1[0] < arr2[0]) sorted.push(arr1.shift());
else sorted.push(arr2.shift());
};
sorted.concat(arr1.slice().concat(arr2.slice()));
};
mergeSort(array);
}
export const doMergeSort=(数组)=>{
const mergeSort=arr=>{
让中间=数学楼层(arr.length/2),
左=合并排序(arr.slice(0,mid)),
右=合并排序(arr.slice(mid));
返回合并(左、右);
};
常量合并=(arr1,arr2)=>{
设排序=[];
while(arr1.length&&arr2.length){
if(arr1[0]
mergeSort()
在一个无休止的循环中调用自身。我做了一个例子来演示-运行它看看
const maxCallCount=5
让callCount=0;
const mergeSort=arr=>{
//循环次数过多时输出并退出
callCount+=1;
log(`${callCount}.mergeSort(${JSON.stringify(arr)})`);
如果(callCount>=maxCallCount){
console.log(“…”);
返回;
}
//您的代码(它永远不会执行超过这些行)
让中间=数学楼层(arr.length/2),
left=mergeSort(arr.slice(0,mid));//递归调用
};
//调用mergeSort,启动递归循环
合并排序([1,2])
在mergeSort()
中,您可以立即递归调用mergeSort
,而不管传递给函数的参数是什么,不管数组的长度,也不管任何条件。您的递归没有基本情况。