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

发布于 2022-09-06 02:48:48 字数 537 浏览 16 评论 0

下面的代码是排序递归函数,最后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));
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柳若烟 2022-09-13 02:48:48

随便举个例:

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]
写下不归期 2022-09-13 02:48:48

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

千紇 2022-09-13 02:48:48

这不是二分法吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文