Javascript 为什么在合并排序函数中,尽管有两条返回语句,但只打印一条语句?
我试图理解合并排序中的递归。 //合并排序Javascript 为什么在合并排序函数中,尽管有两条返回语句,但只打印一条语句?,javascript,sorting,recursion,mergesort,Javascript,Sorting,Recursion,Mergesort,我试图理解合并排序中的递归。 //合并排序 var arr = [1,5,3,0]; function mergeSort(arr) { if(arr.length == 1) return arr; if(arr.length > 1) { let breakpoint = Math.ceil((arr.length/2)); // Left list starts with 0, breakpoint-1
var arr = [1,5,3,0];
function mergeSort(arr) {
if(arr.length == 1)
return arr;
if(arr.length > 1) {
let breakpoint = Math.ceil((arr.length/2));
// Left list starts with 0, breakpoint-1
let leftList = arr.slice(0,breakpoint);
// Right list starts with breakpoint, length-1
let rightList = arr.slice(breakpoint,arr.length);
// Make a recursive call
leftList = mergeSort(leftList);
rightList = mergeSort(rightList);
var a = merge(leftList,rightList);
return a;
}
}
function merge(leftList,rightList) {
let result = [];
while(leftList.length && rightList.length) {
if(leftList[0] <= rightList[0]) {
result.push(leftList.shift());
}else{
result.push(rightList.shift());
}
}
while(leftList.length)
result.push(leftList.shift());
while(rightList.length)
result.push(rightList.shift());
return result;
}
console.log(mergeSort(arr));
结果是如何打印的,递归是如何工作的 程序只打印一次,因为整个逻辑流中只有一个输出语句:当mergeSort将最终的排序数组返回主程序时,该结果将作为唯一的控制台.log调用的值返回
请记住,返回将程序控制发送回调用该函数实例的位置merge仅从mergeSort的底部调用。但是,mergeSort会从主程序和自身的两个位置调用。对于给定的示例,有时在堆栈最深处有三个mergeSort实例。较高的两个将在mergeSort内返回其呼叫点;只有原版才会返回到主程序的log命令。阅读本文,您的一般问题应该已经研究过了;你应该问一个关于你缺乏理解的具体问题。有许多关于堆栈溢出和在线其他地方的mergeSort的解释和说明。我们希望你已经经历了这些。你到底不明白什么?我在下面给了你一个答案来解决你提出的几个问题。。。如果其他人同意我的观点,我投票决定结束这个问题。不管函数中有多少个return语句,只有一个语句会被执行,因为return退出函数。返回并不意味着打印。这意味着停止运行此功能。
[0,1,3,5]