递归经典递归前端面试题

Posted mailyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归经典递归前端面试题相关的知识,希望对你有一定的参考价值。

/** 递归套路 总是两个相加 第一个+后面的所有
 *  1. 根据题目搭架子,定义好入参、出参
 *  2. 考虑并处理极端情况
 *  3. 考虑正常情况(就是递归即函数调用自身)
 * **/


/**1. 拿一对刚出生的小兔子编故事。
 假设,一对刚出生的小兔子,第一个月没有繁殖能力,两个月后生下一对兔子。
 假设所有的兔子都不死,那么10月后有多少对兔子?
 所经历的月数  1  2  3  4  5  6  7   8   9   10
 兔子对数     1  1  2  3  5  8  13  21  34  55  // 斐波拉契数列 前两个数之和等于第三个数
 6月兔子数量 = 5月数量 + 4月数量
 **/
const fBArray = (month) => {
    if (month < 0){
        return 0;
    } else if (month <= 2) {
        return 1;
    }
    return fBArray(month - 1) + fBArray(month - 2);
};
console.log(fBArray(3));


/**2. 使用递归求和**/
let arr3 = [1, 2, 3];
let sumArr = (arr) => {
    if (!arr.length) {
        return 0;
    } else if (arr.length === 1) {
        return arr[0];
    } else if (arr.length === 2) {
        return (arr[0] + arr[1]);
    }
    const newArr = arr.shift();
    return (newArr + sumArr(arr));
};
console.log(arr3);
console.log(sumArr(arr3));
console.log(arr3);

/**3. 使用递归阶乘**/
let factNum = (num) => {
    if (num <= 1) {
        return num
    } else if (num === 2) {
        return num * (num - 1)
    }
    return num * factNum(num - 1);
};
factNum(4);

// 4. 将数组扁平化并去掉重复数据,最终得到一个降序且不重复的数组
let arr1 = [1, [3, 3, 4], [5, 6, 5, 6, 17, 7, [8, 9, [10, 11, [12, 13, 14, 18, 16,  18, [15]]]]], [16]];

let flatArr = (arr) => {
    let newArr = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Array) {
            // newArr = [...newArr, ...flatArr(arr[i])] 第一步 扁平化得到一维数组
            flatArr(arr[i]).forEach(item => { // 第二步 去重
                !newArr.includes(item) && (newArr = [...newArr, item]);
            })
        } else {
            newArr.indexOf(arr[i]) === -1 && (newArr = [...newArr, arr[i]]);
        }
    }
    return newArr.sort((a, b) => b - a); // 第三步 排序
};
console.log(flatArr(arr1));

 

以上是关于递归经典递归前端面试题的主要内容,如果未能解决你的问题,请参考以下文章

C#经典面试题——递归运算

递归经典面试题_ 小例

经典面试题--二叉树的前中后序遍历(递归&非递归)

PHP面试题精讲—无限级分类/无限分类的递归算法和非递归算法-带源码建议收藏

PHP面试题精讲—无限级分类/无限分类的递归算法和非递归算法-带源码建议收藏

高频面试题LeetCode 31:递归回溯八皇后全排列一篇文章全讲清楚