老师,能详细讲一下这个递归原理吗

老师,能详细讲一下这个递归原理吗

https://img1.sycdn.imooc.com//climg/6314833209dfb04406770125.jpg

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 通过递归算法,求1+2+3+4+5+6......100的和。
        function sum(n) {
            if (n == 1) return 1;
            return n + sum(n - 1);
        };

        console.log(sum(100));
    </script>
</body>

</html>


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

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

1回答
imooc_慕慕 2022-09-05 09:45:02

同学你好,解答如下:

递归是将复杂的问题,变成为简单的同一问题,将一个函数不断的调用自己,但是不能无限调用自己,不然就会陷入无穷的死循环,因此需要有一个递归终止条件。

针对于上述题目可知,这个结束条件就是1。

假设1-100的和这个函数为fn();

fn(100) = 100+fn(99);

fn(99) = 99 + fn(98);

fn(98) = 98+fn(97);

...

fn(2) = 2 + fn(1);

fn(1) = 1;

function sum(n) {
 
    // 递归的结束条件,设置递归的出口,如果n等于1,此时递归结束并返回1
 
   if (n == 1) return 1;
 
     //如果不是1,就返回 n+sum(n-1)继续调用自己
 
      return n + sum(n - 1);
 
}
 
var result = sum(100);
 
document.write('1+2+3+4+5+6……100的和是' + result);

假设我们求取1-5之和,那么过程如下:

fn(5) = 5+fn(4);

fn(4) = 4+fn(3);

fn(3) = 3+fn(2);

fn(2) = 2+fn(1);

fn(1) = 1;

得到fn(1)的值之后,接着我们去返回去推fn(5)的值;

fn(1) = 1;

fn(2) = 2+fn(1); ==>2+1 = 3

fn(3) =3+ fn(2); ==>3+3 =6

fn(4) = 4+fn(3); ==>4+6 =10

fn(5) = 5+fn(4); ==>5+10=15

https://img1.sycdn.imooc.com//climg/6315544f09b83de207170233.jpg

上面的推算步骤只是拆分成了每一小步,当电脑计算的时候,每一步都会即刻返回结果。

因此100的数之和和这个举例道理是一样的,

同学可以再重新理解一下。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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