递归函数

135 阅读1分钟
    本质上还是一个函数
    当一个函数在函数的内部, 调用了 自身, 那么就算是一个 所谓的 递归函数(只不过有点小缺陷)
    
    `function fn(n) {
        if (n === 1) {
            // 说明此时想要计算 1 的阶乘, 那么我直接将 1 的阶乘的结果 return 出去
            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       中断函数的递归