递归的运行具体路径和每次的返回值
来源:5-3 二分搜索树的节点插入
昵称已被占用111
2017-10-15
例如这个递归函数,会返回很多个node吗(从来没学过递归,很费解,自己在网上看了一些解释,还是感觉不太清楚)
还有我自己看的一个走迷宫的例子,也是用了递归的思想,和这个很像
和上面的一样,每一次调用都有几个条件语句,每个if里面都有一个递归调用,这些递归调用是穿插执行的还是一个执行完再执行另一个的?困扰了一周了😣
2回答
-
首先,这个课程不是算法的入门课程。关于这个课程的定位,参见这里:http://coding.imooc.com/learn/questiondetail/16248.html
如果对递归不熟悉,无论是树结构,还是你举的走迷宫的例子,都不适合当做理解递归的入门示例。建议你先结合本科算法课本中更简单的递归例子进行研究,再逐步转移到这种稍微复杂的例子上。尤其是迷宫的例子,属于图论领域的算法,需要你对图论有一个大概的认识,结合对递归的理解,才能很好的明白其中的原理。
我的这个课程从第7章开始会接触图论基础;我的《玩转算法面试》课程在第七八九章对递归有更深入的阐述;我的《深度实战玩转算法》课程具体讲解了走迷宫的例子,并且以图形化的形式表现了出来。这些内容如果有兴趣,可以参考。
对于理解递归,一个最基础的认识是:递归函数调用和普通的函数调用是没有区别的!
在普通的函数调用中:A执行一半调用B,B执行一半调用C,C执行结束以后,将回到B没有完成的部分继续执行;B执行结束以后,将回到A没有完成的部分继续执行。
在递归函数的调用中:A执行一半调用A,注意,这里调用的新的A,传的参数完全不一样,只使用新的参数再调用A的功能而已。这个新的A执行完成以后,将回到上一个A没有完成的部分继续执行!递归函数就是普通的函数调用,只不过又调用了自己这个函数而已!
有了这样的一个基础认识以后,对于理解递归,建议你使用小数据集,用IDE提供的debug功能,一步一步跟踪一下程序的运行,搞明白在一个递归函数的调用过程中,程序的每一步在执行以后都发生了什么,数据产生了什么样的变化,和自己理解的程序执行的过程有没有出入,出入在哪里。切记:计算机是工科,是实践的科学,遇到不理解的程序,千万不要对着代码生想。一定要实际试验一下。
依然是,如果对递归的基础概念不理解,无论是这一章的树,还是图,都不是研究递归的好的入门程序。建议从最基础的线性结构中使用递归开始:如何使用递归求一个数组的和;使用递归在链表中插入或者删除节点;递归求斐波那契数列;再到这个课程中排序算法中递归的使用:归并排序法,快速排序法;再到树和图。如果觉得自己对任何一个程序的执行过程理解不透彻,使用小数据量去跟踪!看每一步程序都是怎么执行的,一定不要怕麻烦。这个过程对个人深入理解程序是极其重要的。
加油!
332019-08-03 -
昵称已被占用111
提问者
2017-10-15
为什么图都不清晰。。00
相似问题