《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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值