采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
例如这个递归函数,会返回很多个node吗(从来没学过递归,很费解,自己在网上看了一些解释,还是感觉不太清楚) 还有我自己看的一个走迷宫的例子,也是用了递归的思想,和这个很像 和上面的一样,每一次调用都有几个条件语句,每个if里面都有一个递归调用,这些递归调用是穿插执行的还是一个执行完再执行另一个的?困扰了一周了😣
首先,这个课程不是算法的入门课程。关于这个课程的定位,参见这里: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功能,一步一步跟踪一下程序的运行,搞明白在一个递归函数的调用过程中,程序的每一步在执行以后都发生了什么,数据产生了什么样的变化,和自己理解的程序执行的过程有没有出入,出入在哪里。切记:计算机是工科,是实践的科学,遇到不理解的程序,千万不要对着代码生想。一定要实际试验一下。
依然是,如果对递归的基础概念不理解,无论是这一章的树,还是图,都不是研究递归的好的入门程序。建议从最基础的线性结构中使用递归开始:如何使用递归求一个数组的和;使用递归在链表中插入或者删除节点;递归求斐波那契数列;再到这个课程中排序算法中递归的使用:归并排序法,快速排序法;再到树和图。如果觉得自己对任何一个程序的执行过程理解不透彻,使用小数据量去跟踪!看每一步程序都是怎么执行的,一定不要怕麻烦。这个过程对个人深入理解程序是极其重要的。
加油!
谢谢老师!突然好想明白了许多,主要我是一直是学习java的,对算法和数据结构不是太清楚,但是特别感兴趣,老师的课程对我帮助特别大,会一直学下去的(๑•̀ω•́๑)
老师上面提到迷宫属于图论领域,那我是应该直接在已经学完基本图论的知识之后,是直接学习《可视化》的那门课程还是接着学习你的新课程《图论》?
学完这个课程以后,如果对《看得见的算法》课程中的demo感兴趣,就已经完全可以学习我的《看得见的算法》了。《玩转图论算法》相较而言,是更系统的阐述图论领域的算法知识。如果对系统理解图论领域经典算法感兴趣,可以去学习:)加油!:)
为什么图都不清晰。。
登录后可查看更多问答,登录/注册
课程专为:短时间内应对面试、升职测评等艰巨任务打造
8.7k 21
5.7k 3
4.9k 5
1.3k 18