《javascript高级程序设计》第七章 递归recursion

7.1 递归
7.2 闭包
  7.2.1 闭包与变量
  7.2.2 关于this 对象
  7.2.3 内存泄漏
7.3 模仿块级作用域
7.4 私有变量
  7.4.1 静态私有变量
  7.4.2 模块模式
  7.4.3 增强的模块模式
 
书上给的例子是:(还有一个用argument.callee的,但是在严格模式下 strict mode,无法访问这个属性)
 
var factorial = (function f(num){
    if (num <= 1){
        return 1;
    } else {
        return num * f(num-1);
    }
});

网上还有一个相类似的:

var factorial=function factorial(i,a){
    a=a||1;
    if(i<2){
        return a;
    }
    return factorial(i-1,a*i);
};
 
网上还有个比较经典的汉诺塔hanoi的:
 
var hanoi=function(disc,src,aux,dst){
    if(disc>0){
    hanoi(disc-1,src,dst,aux);
    document.writeln('Move disc '+disc+' from '+src+' to '+dst);
document.writeln('<br/>');
    hanoi(disc-1,aux,src,dst);
   }
}
 
根据书上里规范改写为:
 
var hanoi = (function f(disc,src,aux,dst){
    if(disc>0){
            f(disc-1,src,dst,aux);
            document.writeln('Move disc '+disc+' from '+src+' to '+dst);
            document.writeln('<br/>');
            f(disc-1,aux,src,dst);
    }
});

(重点来了,按照书上的例子改写,这样更加有利于延展。。。哈哈哈)
var s = hanoi;
hanoi = null;
s(3,'Src','Aux','Dst');
原文地址:https://www.cnblogs.com/della/p/3296126.html