<script>
        function calc(n){
alert("n="+n); 
            if(n>0)
return(calc(n-1)*n);
return(1); 
}
        document.write("正整数6的阶乘是"+calc(6));
</script>--------------------------------------
代码中为什么要有return(1)?它的作用是什么?
如果去掉return(1)则显示: 正整数6的阶乘是NaN?我是新手,能说详细些吗?谢谢!

解决方案 »

  1.   

    function calc(n){
    alert("n="+n); 
      if(n>0)
    return(calc(n-1)*n);
    return(1); 
    }等同于function calc(n){
       alert("n="+n);
      if(n>0) {
         return(calc(n-1)*n); 
       }
       return(1); 
    }继续等同function calc(n){
       alert("n="+n);
       if(n>0) {
         return calc(n-1)*n; 
       }
       return 1;
    }
      

  2.   

    如果不写的话,当n=0时,函数没有返回值,当然是NaN了
      

  3.   

    是不是return(1) 之前的计算好了,再与 return(1)的结束=1 相乘呀!  
      

  4.   

    他的演示过程是不是这样:当  n>0 时
       return(6*5*4*3*2*1)
    当 n<=0 时
       return(1)-----------------
    但程序在运算过程中也执行了 n=0;
    为什么最终输出结果是 720 而不是 1呢?
      

  5.   


    当n=6时程序是这样执行的吧
    calc(5)*6
    calc(4)*5*6
    calc(3)*4*5*6
    calc(2)*3*4*5*6
    calc(1)*2*3*4*5*6
    calc(0)*1*2*3*4*5*6
    当执行calc(0)时程序就不会执行n>0里面的语句了,它就会执行 return(1)这句,如果这句不写程度返回的就是
    NaN*1*2*3*4*5*6=NaN,如果改成 return 2 则结果是 2*1*2*3*4*5*6=1440
      

  6.   


    例如输入5
    代码会这样执行calc(n-5)*calc(n-4)*calc(n-3)*calc(n-2)*calc(n-1)*5当执行n-5的时候为0,如果不return 1的话,calc(n-5)就返回undefined,undefined和其他数值相乘都返回NaN,所以要return 1
    其实这里多了一步计算了,应该改成
    function calc(n){
      if(n>1) {
      return calc(n-1)*n; 
      }
      return n;
    }
      

  7.   

    想要相关语言的所有资料吗?java,c++,c#,html,javascript,javaweb,sqlserver,oracle,jquery,Linux,等等等等,程序员必备的学习资料,快来看看吧。
    我的压缩包里面不止一两样东西哦,那可是我学习和工作的所有资料,不管是学习还是工作都会需要。
    http://download.csdn.net/user/yangtonghai
      

  8.   

    function calc(n){
    if(n>0){
    return(calc(n-1)*n);
    }else{
    return(1); 
    }
    }
    document.write("正整数6的阶乘是"+calc(6));
    加上大括号比较好理解一点,这是一个函数递归的用法,如果没有return(1),刚当n=0的时候,calc(0)没有返回值,即返回值为undefined,任何数乘以undefined都为NaN。写个比较直观的吧,与上面等价function calc(n){
    var result;
    if(n>0){
    result = calc(n-1) * n;
    }else{
    result = 1;
    }
    return result;
    }
    document.write("正整数6的阶乘是"+calc(6));
      

  9.   

    function calc(n){
      if(n>1) {
      return calc(n-1)*n;  
      }
      return n;
    }
    如果 n<=0的话 他的结果也是 0或都负数,跟上面的return(1) 结果不一样呀!
      

  10.   


    典型的递归求阶乘是个非常简单的逻辑,没必要用递归,递归不是用在这种非常简单逻辑上循环就够了,递归调用时会进栈出栈,函数切换时性能消耗反而更大,循环是最佳选择。递归一般用在循环无法做到的地方,如遍历树节点。阶乘算法实在是不应该用递归。至于return (1) 和 return 1一样,括号可以省略。return 1的目的是阶乘的终点,即从n开始,一直向下相乘n*(n-1) ...,阶乘的终点刚好是1,所以最后直接返回1作为结束递归。写这个例子的人,实在是个人觉得写例子的人是在显摆自己会递归,却不知递归的负面影响,一句: if (n > 0) 暴露了他的幼稚
      

  11.   

    最后的 return (1),并没有类似 return (上面结果*1)的这样相关公式,为什么会把他上面的计算结果即 720 相乘呢?为什么程序在运算过程中也执行了 n=0;不是直接返回结果为 1;另外为什么return (1)都是乘,而不是加减除呢?我越想越糊涂!
      

  12.   

    js里面啥都用递归的。。证明不了解JS
    js没尾递归是致命伤