递归经典递归前端面试题
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));
以上是关于递归经典递归前端面试题的主要内容,如果未能解决你的问题,请参考以下文章
PHP面试题精讲—无限级分类/无限分类的递归算法和非递归算法-带源码建议收藏