其实楼主完全可以搜一下太多了,
我给你找了一个
http://blog.csdn.net/octverve/archive/2007/10/23/1840331.aspx

解决方案 »

  1.   


      <script   language="javascript">
      function   factorial(n)
      {
    if(n <=0)
    {
    return   1   ;  
    }
    else
    {
    return   n   *   arguments.callee(n-1);
       
    }
      }
    alert(factorial(5));//上面的等于下面的 
    function a(m){
       if(m <=0){
    return   1   ;  
    }else{
    return   m*a(m-1);
    }
    }
    alert(a(5))
    //上面的等于下面的 
    alert(5*(5-1)*(4-1)*(3-1)*(2-1)*1)//这个是关于arguments.callee的例子
    function mm(){
       alert("m")
       return arguments.callee;
    }
    alert(mm()())
    alert("新的mm()")
    alert(mm()()())
    </script>
      

  2.   

    跟arguments好象没什么关系~~~递归用的多就觉得越自然~~~
      

  3.   

    看手册去 JScript语言参考callee 属性
    返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。[function.]arguments.callee可选项 function 参数是当前正在执行的 Function 对象的名称。 说明
    callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。示例
    function factorial(n){
      if (n <= 0)
      return 1;
      else
        return n * arguments.callee(n - 1)
    }
    print(factorial(3));
      

  4.   

    的确跟arguments没有关系,只是递归5*4*3*2*1*1。
      

  5.   

    arguments.callee
    指目前被呼叫的函數。看看下面这段:// 我希望 fa 是一个递归的求阶乘的函数.
    var fa = function(n) {
    if (n <= 0)
    return 1;
    else
    return n * fa(n-1); // 递归调用. 注意这里用的是 fa 函数, 而不是 arguments.callee
    };
    alert("fa(5) = " + fa(5)); // 结果 120. 正确!// 我希望 fb 跟 fa 一样也是一个递归的求阶乘函数.
    var fb = fa;
    alert("fb(5) = " + fb(5)); // 结果 120. 也正确!
    // 后来,我改了 fa, 希望它完成其它的事情. 但是我没修改 fb.
    fa = function(n) { return n * 2; };
    alert("fa(5) = " + fa(5)); // 结果 10. 非常正确!// 真 TMD 黑, 刚改完, 又遇到需要求阶乘的东东了, 哦,不怕不怕! 幸亏还有个 fb
    alert("fb(5) = " + fb(5));
    /**
     * 晕死啦, fb(5) 怎么不是 120, 怎么会这样???????
     * 哦, 原来我改了 fa, 递归函数中调用的 fa 已经不是函数本身了.
     * 早知道我递归的时候就用 arguments.callee 好了. 555
    **/