递归的原理与实际开发运用

郭浪 Lv3

递归的原理:

也就是JS执行函数时会进入另外一个空间执行函数,这个空间成为调用栈。若一个函数里面嵌套自己,最终会形成多个调用栈,一层层递进运算再回退运算称为递归运算

说白了理解递归就是函数自己调用自己

数组转树:

1
2
3
4
5
6
7
8
9
10
11
12
const arrToTree = (arr, id=0) => {
const tree = []
arr.forEach(e => {
if (e.pid === id) {
const childrenArr = arrToTree(arr, e.id)
if (childrenArr.length) e.children = childrenArr
tree.push(e)
}
})
return tree
}

递归实现深拷贝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const cloneDeep = oldObj => {
let newObj = Array.isArray(oldObj) ? [] : {}
for (const k in oldObj) {
if (typeof oldObj[k] === 'object') {
newObj[k] = cloneDeep(oldObj[k])
} else {
newObj[k] = oldObj[k]
}
}
return newObj
}

const oldObj = {
a: 1,
b: false,
c: {
aaa: 1,
bbb: 2
}
}

递归函数求斐波那契数列:

斐波那契数列是 1,1,2,3,5,8,13…..就是你要求的当前项为前两项相加,第一项和第二项为1

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”

1
2
3
4
5
6
7
function fn(n) {
if(n == 1 || n == 2) {
return 1
}
return fn(n -1) + fn(n - 2)
}
console.log(fn(8)) //21
  • 标题: 递归的原理与实际开发运用
  • 作者: 郭浪
  • 创建于 : 2025-03-16 22:34:26
  • 更新于 : 2025-03-16 22:34:26
  • 链接: https://guolang.top/2025/03/16/递归的原理与实际开发运用/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。