码迷,mamicode.com
首页 > 其他好文 > 详细

【递归】经典递归前端面试题

时间:2020-07-09 22:46:03      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:调用   扁平化   假设   数组   let   情况   class   多少   函数   

/** 递归套路 总是两个相加 第一个+后面的所有
 *  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));

 

【递归】经典递归前端面试题

标签:调用   扁平化   假设   数组   let   情况   class   多少   函数   

原文地址:https://www.cnblogs.com/mailyuan/p/13276323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!