最近在参考别的大神的一些实例来写一些基础的算法demo。
在写到归并算法的时候就出现了一点的问题。
function MergeSort(array) {
var length = array.length;
if (length <= 1) {
return array;
} else {
var num = Math.ceil(length/2);
var left = MergeSort(array.slice(0, num));
var right = MergeSort(array.slice(num, length));
return merge(left, right);
}
}
function merge(left, right) {
console.log(left);
console.log(right);
var a = new Array();
while (left.length > 0 && right.length > 0) {
if (left[0] <= right[0]) {
var temp = left.shift();
a.push(temp);
} else {
var temp = right.shift();
a.push(temp);
}
}
if (left.length > 0) {
a = a.concat(left);
}
if (right.length > 0) {
a = a.concat(right);
}
console.log(a);
console.log("-----------------------------");
return a;
}
额,用了webstorm的debug来一步步的查看。但是最后的那个return a返回的 a 是给mergeSort这个函数接收还是到达哪里?搞不懂这个算法的递归步骤, debug的时候 return a 这一步的下一步是mergeSort这个函数的闭括号,然后就是right那一步。为什么啊?
求大神解释下。这个是如何进行递归的。
自荐一篇以前写的文章,http://www.cnblogs.com/zichi/...
如果还不懂,继续提问