关于递归的一些不理解地方,请老师解答下,麻烦了。

来源:4-3 递归常见算法题

异乡人丶

2021-06-04 11:17:12

function fib(n){

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

            return fib(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 就是递归的计算结果。

其实,递归就是不断分解的过程,直到满足条件,分解结束,递归结束。

祝学习愉快!

0

0 学习 · 15276 问题

查看课程