请问哪里不对?

请问哪里不对?

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

<title>递归</title>

</head>

<body>

<script>

//补充代码

function num(n){

    if(n==1)return 1;

    renturn n+(n+1);

}

var result = n(100);

alert result;

</script>

</body>

</html>


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

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

5回答
好帮手慕久久 2021-06-15 16:54:54

同学你好,该题目,使用递归没法正着实现,只能倒着实现哈。原因是正着写,我们不知道程序在哪里终止。倒着写时,我们能够知道当n等于1时,num(1)=1,此时让程序终止就可以了。但是正着写时,我们无法知道什么时候终止程序,所以实现不了。如果不理解也没关系,暂时会这么多就行,以后再琢磨。

祝学习愉快!

  • 提问者 神知 #1

            function num(n){

                if(n==1return 1;

                return n+num(n-1);

            }

            var result=num(100);

            alert(result);

    老师这个代码是递归的公式吗?是遇见递归就这样套着写吗?

    2021-09-19 23:30:40
  • 好帮手慕久久 回复 提问者 神知 #2

    同学你好,递归没有公式!“函数内部调用自己本身”这种写法,就是递归:

    https://img1.sycdn.imooc.com//climg/614ac0830984391006390361.jpg

    递归没有公式,所以不能嵌套上图中的代码写其他的逻辑。

    js中很多功能,都没有固定的公式,都要分析着去写。

    如果同学还是不懂,建议先回头把js的内容,复习一遍,再学习。如果实在不懂,那么暂时放弃递归的内容也可以。

    祝学习愉快!

    2021-09-22 13:37:05
好帮手慕久久 2021-06-09 18:03:04

同学你好,解答如下:

想求1-100的和,除了正着计算(1+2+3+...+100)外,还可以倒着计算(100+99+98+...+1),我们这里采取的就是倒着计算。

补充说明:“正着计算”就是从1开始,再加上2......,最终加到100;“倒着计算”就是从100开始,然后加99...,最后加到1。

代码执行过程如下:

首先调用num方法,并传入参数100:

http://img1.sycdn.imooc.com//climg/60c08f6709f21e0404430107.jpg

在num方法内部,由于n不是1,不满足if的条件,所以会执行return n + num(n - 1):

http://img1.sycdn.imooc.com//climg/60c090fc091d45ca05240235.jpg

即num(100)=100+num(99),含义就是前100个数的和=100+前99个数的和:

http://img1.sycdn.imooc.com//climg/60c08fe00996610a07580154.jpg

而num(99)会继续调用num方法,得到num(99)=99 + num(98),含义是num(99)=99+前98个数的和。

将num(99)的值带回到num(100)会得到num(100)=100+99+num(98)。

依次类推,num(100)=100+99+...+2+num(1)。

而num(1)会得到1:

http://img1.sycdn.imooc.com//climg/60c090bd09a1eee006050223.jpg

此时num(100)就等于100+99+...+2+1,到此就求出来了100-1的和。

之所以倒着计算,是因为我们知道num(1)=1,利用num(1)=1结合“倒着计算”,能够终止递归(终止计算过程)并得到具体的值。

祝学习愉快!

  • 提问者 神知 #1

    老师如果正着数的话应该怎么写呀?

    2021-06-12 22:51:19
好帮手慕久久 2021-06-04 18:23:41

同学你好,解答如下:

实际开发中,很少会用到递归,它可能会出现在一些框架源码中。当实现一些大型项目、复杂项目、特殊需求时才可能会用到它(不是一定会用到)。

所以当前阶段,只要了解什么是递归就可以了,如果能将视频中老师讲的内容听懂就更好了。实在听不懂也没关系,可以反复回来学习、多花时间思考。编程和做高考题是一样的,并不是所有的题给你讲几遍你都能听懂,很多时候,即使听7遍、8遍也听不懂,这个时候,就要适当放放,先学自己能接受的,都学会后,再回头学拔高的内容。

祝学习愉快!

  • 提问者 神知 #1

    return n+num(n-1);

    老师括号里为什么不是n+1

    加到100不是递增的吗?

    2021-06-09 15:22:20
好帮手慕星星 2021-03-26 17:48:45

同学你好,递归这部分确实有些绕,但是记住一点是调用嵌套调用即可,可以先写一些简单的代码,慢慢来。

或者可以先跳过学下面的,换一个想法再回来可能会容易一些。

祝学习愉快!

  • 提问者 神知 #1

    老师实际工作写代码需要用到这个递归吗

    2021-06-04 18:15:10
好帮手慕张 2021-01-04 12:01:21

同学你好,代码中问题如下:

1、return单词写错了,多了一个n,导致语法错误

2、函数名称是num,不是n,所以在调用的时候应该调用num

3、alert方法调用需要加()

4、代码逻辑问题:调用函数传入参数100,在函数中只会计算一次100+101=201,就会return返回停止。如果想要一直计算,需要递归,重复调用num函数。传入的时候100,那么就需要计算100+99+98+97+...+1 ,所以num方法传入参数为n-1。

下图为修改过的代码,并加了相应的注释,同学可对照理解。

http://img1.sycdn.imooc.com//climg/5ff292b409f362cd06330575.jpg

​祝学习愉快!


  • 提问者 神知 #1

    老师我在学第二遍的时候,完全不知道怎么写了。。

    2021-03-26 00:07:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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