关于递归的一些不理解地方,请老师解答下,麻烦了。
来源:4-3 递归常见算法题
异乡人丶
2021-06-04 11:17:12
function fib(n){
if(n == 1 || n == 0 ) return 1
return fib(n - 1) + fib(n - 2);//为什么函数这里就知道这步是计算下标8和7的数字相加呢?什么情况下这里是数字计算或者下标计算呢?怎么结合递归调用自身来理解这个递归呢?工作机理是什么样呢?
}
var result = fib(9);//
console.log(result);
1回答
好帮手慕然然
2021-06-04
同学你好,关于递归可以这样来理解:
递归是将复杂的问题,分解为更小的同一问题,就是一个函数不断的调用自己(有点类似于for循环,不断重复执行某段代码),但是不能无限循环调用自己,不然就会陷入无穷的死循环,所以需要有一个递归终止条件。
以同学的代码为例,分解递归执行过程:假设 n = 4
当调用函数fib(4)时, n=4不满足递归终止条件(n == 1 || n == 0),则返回 fib(3)+fib(2),
接下来会执行fib(3)和fib(2),
其中,fib(3)中n=3不满足条件,返回fib(2)+fib(1),接下来执行fib(2)和fib(1),fib(1)满足条件返回1;fib(2)不满足条件继续分解为fib(1)+fib(0),此时fib(1)满足条件返回1,fib(0)满足条件返回1
其中,fib(2)中n=2不满足条件,返回fib(1)+fib(0),此时fib(1)满足条件返回1,fib(0)满足条件返回1
最后将分解后得到的结果加起来:1+1+1+1+1 = 5 就是递归的计算结果。
其实,递归就是不断分解的过程,直到满足条件,分解结束,递归结束。
祝学习愉快!
相似问题