递归三要素
- 找规律,定义函数
- 找等价关系
- 找终止条件
斐波那契数列
// 1 1 2 3 5 8 13
// 特点:从第三个数开始都是前两个数的和
1. 定义函数:fb(n)
2. 找等价关系:fb(n) = fb(n - 1) + fb(n - 2);
3. 找终止条件:if(n <= 2) fb(n) = 1
function fb(n) {
if(n <= 2) return 1;
return fb(n - 1) + fb(n - 2);
}
快速排序
每次找一个基准值,比基准值小的排基准值左侧,比基准值大的排基准值右侧
1. 定义函数:quitSort(arr)
2. 找等价关系:quitSort(arr) = quitSort(left).concat(baseVal, quitSort(right))
3. 找终止条件:if(arr.length <= 1) return arr;
function quitSort(arr) {
if(arr.length <= 1) return arr;
// 找基准值
let baseIndex = Math.floor(arr.length / 2);
let baseVal = arr.splice(baseIndex, 1)[0];
// 分左右数组
let left = [];
let right = [];
for(let i = 0; i < arr.length; i++) {
if(arr[i] < baseVal) {
left.push(arr[i])
}else {
right.push(arr[i])
}
}
// 使用concat将左边、基准值、右边拼接为一个新数组
return quitSort(left).concat(baseVal, quitSort(right));
}