递归、斐波那契数列、快速排序

100 阅读1分钟

递归三要素

  1. 找规律,定义函数
  2. 找等价关系
  3. 找终止条件

斐波那契数列

// 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));
}