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]