老师,有个地方我不明白

老师,有个地方我不明白

function num(n){

        if(n==1||n==0) return 1;

        return num(n-1)+num(n-2)

    }

    console.log(6)

老师,我不明白为什么参数N是下标呢?

比如我想计算13,然后这里 num(6-1)+num(6-2),之前学的时候下标不是这样表示的吗→比如N[6],所以我不明白

(n-2)为什么是下标了

正在回答

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

2回答

同学你好,问题解答如下:

1.老师在这里所说的下标是说的1,1,2,3,5,8,13这一个数列中,每一个数字的位置。N[6]是数组下标获取数组元素的语法,这个数列不是数组,不要按照数组的语法去想哦。


2.老师把函数的执行步骤都给你写下来,其他的不要想,同学只要按照这个执行步骤去看每一步的返回结果,“num(5)和num(4)为什么可以表示5和8”这个疑问就解开了。

(1)调用函数num(6),num(6)返回值是num(5)+num(4) ,注意它的返回值也是函数调用,所以需要等num(5)和num(4)调用执行完毕,num(6)才会有返回值。

(2)调用num(5),num(5)返回值是num(4)+num(3) ,它的返回值也是函数调用,需要等num(4)和num(3) 执行完毕,num(5)才会返回结果。

(3)调用num(4),num(4)返回值是num(3)+num(2) ,它的返回值也是函数调用,需要等num(3)和num(2) 执行完毕,num(4)才会返回结果。

(4)调用num(3),num(3)返回值是num(2)+num(1) ,它的返回值也是函数调用,需要等num(2)和num(1) 执行完毕,num(3)才会返回结果。

(5)调用num(2),num(2)返回值是num(1)+num(0) ,它的返回值也是函数调用,需要等num(1)和num(0) 执行完毕,num(2)才会返回结果。

(6)调用num(1)和num(0),因为函数num中,判断n为1或者为0时,直接返回结果1,即num(1)和num(0)返回结果1。

(7)num(0)和num(1)既然有了结果,那么就会往上一层一层的返回结果。即 : num(2)返回值为1+1=2,num(3)返回值为2+1=3,num(4)返回值为3+2=5,num(5)返回值为5+3=8,num(6)返回值为8+5=13

祝学习愉快~

  • 哦,这下我明白了,因为课件里讲了下标为N所以被搞混了。现在懂了,谢谢老师解答
    2020-10-21 10:20:43
好帮手慕夭夭 2020-10-19 11:38:41

同学你好,这里的n不是下标,是参数。注意代码中,console.log(6)只是输出了一个数字6,并没有调用函数哦。要使用函数名加括号的语法调用,并传入实参6。如下图所示:

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

具体参考如下理解:

n是形参,num(n - 1) 和num(n - 2)中,n-1和n-2就是调用函数num传入了实参。例如第一次调用函数num,传入参数6,则n=6。函数num中又调用了两次num,传入参数6-1和6-2(也就是参数5和4),即num(6)执行之后的返回值就是num(5) +num(4) 。num(5)和num(4)就是再次执行函数num,直到最后调用num传入的参数为1时,n=1符合if判断,执行return 1,就不再往下执行了。

最后输出的结果是13:

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

祝学习愉快~

  • 老师,我还是不太明白,这里num(5)+num(4)代表的是1,1,2,3,5,8,13中的5和8,是吧,我不明白为什么可以表示5和8呢。。。。
    2020-10-20 19:54:59
  • 老师,我又看了一遍视频,视频里老师讲的是下标为n的那项的值啊
    2020-10-20 20:44:52
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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