关于递归该如何使用!

关于递归该如何使用!

问题描述:

老师你好,对于递归该如何使用我好是不太清楚。
比如

相关代码:

   function fib(num) {
      if (num == 1) return 1;
      if (num == 2) return 2;
      return fib(num - 1) + fib(num - 2);
    }

    console.log(fib(13));

这个我可以写出来,但是fib(num - 1) + fib(num - 2)这个推到我却想不到,后面的问题也是。反应不过来怎么去使用,所以我想如果可以的话有更多的练习题么?我想好好练习一下

正在回答

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

2回答

同学你好,递归其实没有什么内容,就一个点,即在函数内部调用函数本身。不管做多少题,它们的核心原理都是一样的,换汤不换药。如果其中一个你能弄懂,其他的也非常容易理解了。如果一个不理解,那么做一百道也是无用的。课程中讲解的案例都是千挑万选的最经典的案例,如果同学能把课程中的学好,能把课后习题也做好,就可以掌握递归,无需消耗时间做无用功了。如果不理解,就建议同学多听几遍视频,多练习几遍,自己试着去理解。可以把自己的理解放在问答区,老师会为你指点,这样的学习效果才是更好的。

老师教你一个小方法,可以自己一步步去写出它的执行过程,这样会帮助你理解。例如本案例如下,我们先传入一个数值小点的参数,便于分析执行步骤:

1、例如调用fib(4),参数num=4。返回值为fib(3) + fib(2) ,但是这个返回值是调用了函数fib,那么需要内层调用的fib执行完毕之后,第一次调用fib才会返回具体的值。

2、调用fib(3) 和fib(2)  ,fib(3)返回值为fib(2) + fib(1), fib(2)返回值为2(因为符合第二个if判断)。

3、调用fib(2) 和 fib(1)fib(2) 返回值为2,fib(1)返回值为1。 截止目前为止,没有再继续调用fib,全部返回值具体的值。则一层一层往上返回值。

fib(1) =1

fib(2)=2

fib(3)=fib(2) + fib(1)=2+1=3

fib(4)=fib(3) + fib(2)=3+2=5

推导之后,可以去验证一下:

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

输出结果为5:

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


祝学习愉快~


  • 余长愚 提问者 #1

    推倒我试过,但是我想不到递归的条件。。。比如说为什么是fun(n-1)+fun(n-2)可以达到效果

    2021-01-09 13:02:44
好帮手慕夭夭 2021-01-09 15:26:33

同学你好,学习知识要循序渐进,谁也没有办法一下子就想到要怎么做,慢慢去理解吧,需要一个过程。另外,实际开发中,递归应用并不会这么难。建议同学先去复习一下前面的小节,老师在课上讲过一个阶乘的例子,实现一个效果,就是要慢慢去推导它。还是要多啰嗦几句,得多看,多理解,多练习,把课程内容先掌握牢固了哈。地址如下:

https://class.imooc.com/lesson/1625#mid=37436

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

祝学习愉快~

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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