老师,有个地方我不明白
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)为什么是下标了
正在回答
同学你好,问题解答如下:
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不是下标,是参数。注意代码中,console.log(6)只是输出了一个数字6,并没有调用函数哦。要使用函数名加括号的语法调用,并传入实参6。如下图所示:
具体参考如下理解:
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:
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星