JavaScript学习笔记—递归
1. 编写递归函数,一定要包含两个要件编写递归函数,一定要包含两个要件
(1)基线条件:递归的终止条件
(2)递归条件:如何对问题进行拆分
2. 递归的核心思想
- 将一个大的问题拆分为一个个小的问题,小的问题解决了,大的问题也就解决了
递归的作用和循环是一致的,不通电在于,递归的思路比较清晰简洁,循环的执行性能比较好
调函数自身过程中,会产生函数作用域,调几次就会产生几次,产生函数作用域会开辟内存空间
// 创建一个函数,可以用来求任意数的阶乘 /* 1! 1 2! 1 x 2 = 2 3! 1 x 2 x 3 = 6 ...... 10! 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 = xxx */ function jieCheng(num) { // 创建一个变量用来记录结果 let result = 1; for(let i = 2; i <- num; i++) { result *= i; } return result; } let result = jieCheng(3) console.log(result); // 6 // 用递归解决阶乘问题 /* 5! = 4! x 5 4! = 3! x 4 3! = 2! x 3 2! = 1! x 2 1! = 1 */ function jieCheng2(num){ // 基线条件 if(num === 1){ return 1; } // 递归条件 // num! = (num - 1)! * num return jieCheng2(num-1) * num; } result = jieCheng2(5); console.log(result); // 120 /* jieCheng(5) - return jieCheng2(4) * 5 - return jieCheng2(3) * 4 - return jieCheng2(2) * 3 - return jieCheng2(1) * 2 - return 1 */
3. 递归练习
一对兔子出生后的两个月后每个月都能生一对小兔子
编写一个函数,可以用来计算第n个月的兔子的数量
1 2 3 4 5 6 7 8 9 10 11 12
1 1 2 3 5 8 13 21 34 55...
规律:当前数等于前两个数之和(斐波那契数列)
// 求斐波那契数列中的第n个数 function fib(n) { // 确定基线条件 if(n < 3) { return 1; } // 设置递归条件 // 第n个数 = 第n-1个数 + 第n-2个数 return fib(n - 1) + fib(n - 2); } let result = fib(8); console.log(result); // 21
分类:
JavaScript
标签:
JavaScript学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通