- 发现很多人都觉得递归很简单,让我不太理解。递归还是很难的,对于前端来说能掌握树的查询也就够了。在算法中可以解决很多问题。
先来几个递归的遇到的场景
let obj = {
name: "zs",
age: 18,
children: {
like: '网球',
children: {
gender: '男'
}
}
}
let fn = (obj, num = 0) => {
if (Object.prototype.toString.call(obj) === "[object Object]") {
num += Object.values(obj).length
if (obj.children) {
num = fn(obj.children, num-1)
}
}
return num
}
console.log(fn(obj));
let num = 3
let fn = (n, count = 0) => {
if (n > 0) {
n -= 1
count += n
count = fn(n, ++count)
}
return count
}
console.log(fn(num));
上面代码第一个是自己遇到类似的吧, 第二个是自己验证所写的。
如果有兴趣的可以自己在控制台中查看执行的过程。
递归的原理就是 栈 先进后出的
下面代码的这个事例就是最好的展示了
下面的这段代码的执行顺序 5x4x3x2x1 如果有人是这样想的话,可以看下栈的进出顺序了。
下面的代码过程是 1x2x3x4x5
let fn = (n)=> {
if(n<=0) return
if(n === 1 ) return 1
return n * fn(n-1)
}
console.log(fn(5));