关于js函数递归return问题

<script type="text/javascript">
            var j;
             function text(n){
                if(n===1){
                    return 1;
                }            
             return   j= n*text(n-1);
            }
             text(4);
           console.log(j); 
        </script>

如上代码,会弹出24;

             var j;
             function text(n){
                if(n===1){
                    return 1;
                }            
                j= n*text(n-1);
            }
             text(4);
           console.log(j); 

此代码 会弹出NaN;
疑惑是为什么下面这代码会这样,递归必须return么?

阅读 5.7k
3 个回答

很明显必须return啊,如果你不加return,在执行j=4*text(4-1)的时候,text(4-1)根本就不会有返回结果,所以相当于4*undefined,所以最终的结果就是NaN

递归和你return不return并没有关系,但是j= n*text(n-1);你这句话用到的text的返回值了,没有return就会默认给你return undefined,结果可想而知。

问问题前先把代码格式写好,让别人看不痛苦吗?你不return函数没有返回值怎么计算,运算到底就完了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题