这个函数是怎么计算的,结果是72,为什么不是12

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            function fun(n){
                var t;
                if((n==0)||(n==1)){
                    t=3;
                }else{
                    t=n*fun(n-1);
                }
                return t;    
            }
            document.write(fun(4));
        </script>
    </body>
</html>


jugge
浏览 1698回答 3
3回答

水墨流沙

第一次循环是4*fun(3),第二次fun(3)就是3*fun(2),第三次fun(2)就是2*fun(1),第四次fun(1)就是t=3,所以结果就是4*3*2*3=72。没错啊

习惯受伤

典型的递归函数,其中:if((n==0)||(n==1)){     t=3; }这部分没有调用自身的部分称之为“递归出口”,所有递归函数都必须有一个有效的递归出口。下边else部分就是递归调用了。递归的思想就是将复杂的事情简单化。

西兰花伟大炮

因为这是一个递归函数调用,你觉得等于12是因为你认为函数只执行了一次,你就调用了一次,实际上调用了4次,所以是72不奇怪,我也没去验证,但原因是这样的
打开App,查看更多内容
随时随地看视频慕课网APP