关于函数递归

关于函数递归

 <script>

        // 书写一个函数,这个函数内部会自己调用自己,从而形成递归

        function factorial(n){

            // 函数的功能是计算n的阶乘,n!不就是n * (n-1)!么

            if(n==1)return 1;

            return n * factorial(n-1)

        }

        var result = factorial(6)

        alert(result)

    </script>


https://img1.sycdn.imooc.com//climg/633fcfc809735bda08560174.jpg老师,我没有明白这里,当减到1时,它不应该return 1嘛?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_慕慕 2022-10-07 15:42:40

同学你好,解析如下:

这里它的结果确实是1

当fn(n-1)  等于fn(1)的时候,此时的n=2   因此不会走if判断这条语句

https://img1.sycdn.imooc.com//climg/633fd205094231c003120119.jpg

最后return  n*factorial(n-1)  得到的是2*factorial(1)   此时会再次进入到函数传入参数即n = 1 这个时候才会走if判断语句 return 1;应该这样去理解

但是因为1的阶乘是1 因此这个地方可以看作是1

祝学习愉快~

  • 提问者 永无止境内卷 #1

    我还是没有特别理解,最后return  n*factorial(n-1)  得到的是2*factorial(1)   ,然后factorial(1)会再次调用函数,所以值应该返回1。结果应该也是1呀,但它是5040.请老师解答一下

    2022-10-07 16:04:56
  • 提问者 永无止境内卷 #2

    老师,我理解了

    2022-10-07 16:26:08
  • imooc_慕慕 回复 提问者 永无止境内卷 #3

    同学你好,解析如下:

    这道题的结果为720不是5040

    6! = 6*5!;

    5! = 5*4!;

    4! = 4*3!;

    3! = 3*2!;

    2! = 2*1!;

    那么6! = 6*( 5*4!);

    6! = 6*(5*(4*3!));

    6! = 6*(5*(4*(3*2!)));

    6! = 6*(5*(4*(3*(2*1!))));

    我们再返回去看这个函数当n不等于1的时候它只会走  return  n*factorial(n-1)  这段代码

    最后return得到的结果应该是

    func(6) = 6*func(5);

    func(5) = 5*func(4);

    func(4) = 4*func(3);

    func(3) = 3*func(2);

    func(2) = 2*func(1);

    然后我们再将这个结果往回带入进去

    func(2) = 2*func(1);   结果为2;

    func(3) = 3*func(2);   结果为3*2 = 6;

    func(4) = 4*func(3);   结果为4*6 = 24;

    func(5) = 5*func(4);   结果为5*24 = 120;

    func(6) = 6*func(5);   结果为6*120 = 720;

    同学可以根据这个解析再重新理解理解。

    祝学习愉快~

    2022-10-07 16:31:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师