同事关于递归的面试题

156 阅读1分钟

本文已参与 「新人创作礼」活动, 一起开启掘金创作之路。

R-C.jpg

1. 求和 1 - n 的和

// 递归求和 
function sum(n) {
    // 给定一个终止条件
    if(n == 1) {
        return 1
    }
    // 先提出来一个最大数, 然后每循环一遍加上传入数字的减一
    return n + sum(n-1)
}
console.log(sum(100));

2. 等差数列的和

// 求等差数列的和 1, 3, 5, 7 等, 两数之间差数相等 公式(首项 + (n-1) *公差)
function foo(a, b, n) { // a: 首项; b: 公差; n: 有几项
    if(n == 1) {
        return a
    }
    return a + b * (n - 1) + foo(a, b, n - 1)
}
console.log(foo(3, 2, 4)); // 3, 5, 7, 9 总和: 24

3. 求数组的和

// 求数组的和
function bar(arr, start, end) { // arr 第一个是数组; start 开始的下标; end 结束的下标
    // 当开始的下标和结束的下标一样那么就结束循环
    if(arr[start] == arr[end]) {
        return arr[end]
    }
    // 数组的第一个值 + 每次循环都会把下标加一 直到循环条件结束时打印输出
    return arr[start] + bar(arr, start + 1, end)
}
console.log(bar([20, 50, 90, 100], 0, 3)); // 260