本质上还是一个函数
当一个函数在函数的内部, 调用了 自身, 那么就算是一个 所谓的 递归函数(只不过有点小缺陷)
`function fn(n) {
if (n === 1) {
return 1
}
return n * fn(n - 1)
}
var sum = fn(4)
console.log(sum)
var sum1 = fn(10)
console.log(sum1)`
第一次调用 传递的参数为 4
形参 n === 4
函数体 1. if 分支 2. return 递归调用
此时 分支语句 不会执行, 开始 执行 return 递归调用
return n * fn(n - 1) return 4 * fn(3) == 24
计算 fn(3) === 6
传递的 形参 n === 3
此时分支语句不会执行, 开始执行 return 递归调用
return n * fn(n - 1) return 3 * fn(2) === 6
计算 fn(2) === 2
传递的 形参 n === 2
此时分支语句不会执行, 开始执行 return 递归调用
return n * fn(n - 1) return 2 * fn(1) === 2
计算 fn(1) === 1
传递的 形参 n === 1
此时 分支语句 判断成功, 所以直接 return 1 中断函数的递归