# 递归

### 发生前提：
递归是在一个函数通过名字调用自身的情况下发生的
如：
```
    function a(n){
        if(n<=1){
            return 1
        }else{
            return num*a(n-1)
        }
    }
    
```
这是一个经典的递归阶乘函数，但是接下来的操作却可能会导致他出错

```
 function a(n) {
            if (n <= 1) {
                return 1
            } else {
                return n * a(n - 1)
            }
        }
        console.log(a(5)) //120

        var cheng=a
        a=null
        console.log(cheng(5))// : a is not a function


```
以上代码把a保存在一个变量（cheng）中，然后将a赋值为null  
在cheng执行的过程中 必然会执行到a  (在cheng 中else代码块的函数名字改不了)
但是此时a已经不是函数了，所以会报错  a is not a function


上面问题的解决措施：
