# 递归
编写递归函数时,必须告诉它何时停止递归。
正因为如此,每个递归函数都有两部分:
- 基线条件(base case)
- 递归条件(recursive case)
递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。
# 求和
const getSum = (list, sum = 0) => {
if (list.length) {
const pre = list.splice(0, 1)[0] + sum;
return getSum(list, pre);
} else {
return sum;
}
};
console.log(getSum([1, 2, 3, 4]));
# 快排
const quickSort = (arr) => {
if (arr.length < 2) return arr;
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr.splice(pivotIndex, 1)[0];
let less = [];
let greater = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
less.push(arr[i]);
} else {
greater.push(arr[i]);
}
}
return [...quickSort(less), pivot, ...quickSort(greater)];
};
console.log(quickSort([2,3,4,1,6,3,9]))
← 时间复杂度和空间复杂度 二分法 →