《JavaScript高级程序设计》读书笔记7.1递归

  • 递归函数是在一个函数通过名字调用自身的情况下构成的。

  • 命名函数表达式在严格模式和非严格模式下都能用。命名函数表达式中的函数命名变量f只能在函数体内使用。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    一般情况
    function factorial(num){
    if(num<=1){
    return 1;
    }else{
    return num*factorial(num-1);
    }
    }

    使用arguments.callee,但不能用于严格模式
    function factorial(num){
    if(num<=1){
    return 1;
    }else{
    return num*arguments.callee(num-1);
    }
    }

    命名函数表达式(函数名理解为一个变量名,再按变量的复制理解)
    var factorial=(function f(num){
    if(num<=1){
    return 1;
    }else{
    return num*f(num-1);
    }
    })
  • 另一个递归的经典例子——汉诺塔

    1
    2
    3
    4
    5
    6
    7
    function hanori(n,src,aux,dst){
    if(n>0){
    hanori(n-1,src,dst,aux);
    console.log('Move '+n+' from '+src+' to '+dst);
    hanori(n-1,aux,src,dst);
    }
    }
liborn wechat
欢迎您扫一扫上面的微信二维码,订阅我的公众号!