js函数递归小笔记谨防遗忘

106 阅读1分钟
     function foo() {
         console.log(`你好`);
         foo()
     }
     foo()
  • 函数不调用不执行,调用之后才执行,按顺序执行---->>>调用!,再执行内部,执行到调用自己时,会一直重复调用当前这个函数,函数内部没写停止条件的话,会导致死循环(卡死浏览器)!*

      function fun(a) {
          if (a === 1) {
              return 1;
          } else {
              return (a + fun(a - 1))
          }
      }
      console.log(fun(2))
      console.log(fun(3))
      console.log(fun(4))
      console.log(fun(5))
      console.log(fun(6))
    

    利用函数递归来干活,当前函数的结果是怎么来的...

    当2传进去的时候,以上条件都不符合它,往下走,代入=2+fun(2-1),fun调用自己了,这时候是重点,fun(1)把这个1再传给自己,然后遇到了第一个条件,被return弹回了1,所以2+(2-1)=3

    当3传进去的时候,以上条件都不符合它,往下走,代入=3+fun(3-1),fun再调用自己了,这时候是重点,fun(2)把这个2再传给自己,第一条件不符合它往下走,(2-1),fun再调用自己了,这时候是重点,fun(1)把这个1再传给自己,然后遇到了第一个,return弹回了1,所以3+(3-1)+(2-1)=6

    当4传进去的时候,以上条件都不符合它,往下走,代入=4+fun(4-1),fun调用自己了,这时候是重点,fun(3)把这个3再传给自己,第一条件不符合它往下走,(3-1),fun调用自己了,这时候是重点,fun(2)把这个2再传给自己,第一条件不符合它往下走,(2-1),fun调用自己了,这时候是重点,fun(1)把这个1再传给自己,然后遇到了第一个条件,被return弹回了1,所以4+(4-1)+(3-1)+(2-1)=10

    ......