递归初步理解

来源:6-4 改进添加操作:深入理解递归终止条件

Screenly

2018-09-11

老师您好,这里是不是就可以抓住一个重点,就是根节点,然后想尽一切办法返回根节点的类型,也就是递归的点,这样就能更好的入手??

写回答

1回答

liuyubobobo

2018-09-12

递归是计算机设计中的难点,本身的抽象性质,导致每个人理解起来,其叙述出的语言不同。说实话,我不很理解你描述的语言,也不敢很肯定的说你理解的是绝对的正确或者错误。:-(


我个人认为,理解递归的关键是理解递归的宏观语意这个概念。换句话说,写递归函数,一定要明确:这个递归函数的输入和输出是什么,其内在的逻辑都要为这个函数的语意服务!(写任何函数都是如此,但这一点在设计递归函数是尤为重要。)


在明确了递归函数的语意之后,递归函数只不过在组建逻辑的时候,需要调用自己而已(A调用A),而非递归函数是调用别人(A调用B),但是无论是调用的机制,执行的方法,都完全是一样的:)以我的经验,大多数同学相对比较透彻的理解递归,都是有一个临界点的,在大量的经验积累的基础上,突然明白了递归不过如此。一旦理解了递归,其实很多时候,写递归函数比写非递归要简单很多(这点在动态规划类问题上很明显),同时,对计算机编程的理解也会上一个阶梯。


对于递归,在我看来,用什么语言叙述,都不如通过大量的练习,大量的接触递归可以解决的问题,来深入理解他。通过对不同的问题的解决,调试,跟踪,比较,这些过程比仅仅盯着递归的定义,或者一两个递归问题去生想硬看有效得多。关于这点,可以参考我的公号文章中第8条:https://mp.weixin.qq.com/s?__biz=MzU4NTIxODYwMQ==&mid=2247483836&idx=1&sn=90854aa76507281403e4dd9cd434a12b&chksm=fd8caefacafb27ec78f999fde4f1217c04c6e2ff28cf51fe511d8fa29d484d9281ff91de8c9c&mpshare=1&scene=1&srcid=09126022HxSIuPVsgBAehrpE&pass_ticket=b%2FofwCL2%2F743rqNVPZQ6tOGaOSHTXTSg%2BkNmZQtG6GX2n8Ff0UWDnExGcaxwS4aQ#rd


这个课程从第七章开始,后续近乎所有内容都和递归有关。Leetcode上所有二叉树,DFS,回溯,动态规划,等标签的内容,也都可以使用递归解决。 都是很好的训练内容。有问题可以随时在课程问答区提问。另外,在我的课程:玩转数据结构中(https://coding.imooc.com/learn/list/207.html)在更早的位置,学习链表的时候,便开始深入介绍递归,之后,近乎所有的数据结构(BST,堆,线段树,Trie,并查集,AVL,红黑树)也都需要递归,有兴趣也可以参考:)


加油!:)

2
1
Screenly
非常感谢!感谢老师耐心回复!!
2019-06-17
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程