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
posted @   程序员张3  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示