注意:这只是为了学习和改善自己。我知道数组的可用排序方法。我只是试图让TCO的基础知识降低。尾部呼叫优化javascript
当前尝试使用递归进行排序算法。但是,当我尝试处理大型数据集(+4000对象)时,我仍然遇到堆栈溢出错误。我正在尝试实施TCO。我对这个概念相当陌生,但我认为我有这个主意。但是,我仍然收到堆栈溢出错误。
const sort = (arr, counter) => {
if (!counter) {
counter = arr.length - 1;
}
for (let n = 1; n <= counter; n++) {
if(arr[n - 1] < arr[n]) {
let placeHolder = arr[n];
arr[n] = arr[n - 1];
arr[n - 1] = placeHolder;
}
}
counter -= 1;
return counter === 0 ? arr : sort(arr, counter);
};
function sortRecursive(arr) {
return sort(arr);
}
UPDATE:
我设法得到它的工作,但我不明白为什么。我设法处理了10万次递归,没有任何问题。我必须移动检查计数器是否定义的布尔值。但是,我不太明白为什么会使它工作。
const sort = (arr, counter) => {
if (!counter) {
counter = arr.length - 1;
}
for (let n = 1; n <= counter; n++) {
if(arr[n - 1] < arr[n]) {
let placeHolder = arr[n];
arr[n] = arr[n - 1];
arr[n - 1] = placeHolder;
}
}
counter -= 1;
if (counter === 0) {
return arr;
} else {
return sort(arr, counter);
}
};
function sortRecursive(arr) {
return sort(arr, arr.length - 1);
}
OUTPUT:
let firstArr = [];
let secondArr = [];
for (let x = 0; x < 100000; x++) {
firstArr.push(Math.ceil(Math.random() * 100000));
secondArr.push(Math.ceil(Math.random() * 100000));
}
sortRecursive(firstArr);
//Array[100000]
它是什么,你叫TCO? – Ced
你可以给样品/输出吗? –
@Ced no Array.sort() –