递归函数中return使用的问题.

下面的代码是排序递归函数,最后return的是一层层递归后的结果,但是当入参的 arr 是一个很长的数组时感觉想象一个个结果的时候太抽象怎么办,有什么好的方法去理解吗?

var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};
阅读 4.1k
3 个回答

随便举个例:

1、quickSort([5,3,4,5,6,7,4,1,9])
2、return [quickSort([5,3,4,5,4,1]) , 6 , quickSort([7,9])]
3、return [quickSort([3,4,4,1]),5,quickSort([5]) , 6, quickSort(7),9]
4、return [quickSort([3,1]),4,4,   5,5,   6,   7,9]
5、return [1,quickSort([3]),4,4,   5,5,   6,   7,9]
6、return [1,3,4,4,   5,5,   6,   7,9]
新手上路,请多包涵

有一个思路:
递归, 顾名思义就是函数调用函数,一次递归的完成终究要回到原来的函数上去, 那就先从少到多, 推演函数递归调用的过程, 首先是退出条件0个元素, 然后1个元素到退出的过程, 接着搞明白2个元素是如何递归变成1个元素的, 然后三个元素, 如果你能一步一步推到3个元素, 再多的基本没有什么区别了!

这不是二分法吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题