为什么JS的递归存在堆栈溢出问题?

时间:2018-08-18 21:57:00

标签: javascript algorithm sorting recursion tail-recursion

更新:在ECMAScript 6中,您可以使用严格模式启用尾部调用优化。只需在文件的顶部放置“ use strict”,就可以了。

我不明白为什么下面的冒泡排序函数的空间复杂度大于0(1)。当我输入一个大数组时,出现堆栈溢出错误。这是为什么?

//Bubble sort using recursion

var swapped = true

function swap(array, i, j) {
  var temp = array[i];
  array[i] = array[j];
  array[j] = temp;
}

function recursiveSwapping(arr, i = 0) {
  var len = arr.length;
  if (i >= len) {
    return arr
  }
  if (arr[i] > arr[i + 1]) {
    swap(arr, i, i + 1);
    swapped = true
  }
  return recursiveSwapping(arr, i + 1)
}

function recursiveBubbleSort(arr) {
  if (!swapped) {
    return arr
  }
    swapped = false
    recursiveSwapping(arr, i = 0)
    return recursiveBubbleSort(arr)
}

0 个答案:

没有答案