这一篇内容是根据读者的反馈,补充了一些原来课程中没有规划的内容。考虑到有的读者不经常去读者圈提问题,在此建立一个读者群,扫描群二维码可以加群讨论:
(若群满了,可加“madacui”微信号拉您进群,请备注:算法读者,谢谢~)
另外,本课程的代码请戳这里。
如何分析递归程序
递归不是“先有鸡还是先有蛋的问题”,也不是“从前有座山,山里有座庙…”,严格来说,递归应该不是算法设计,而是算法实现范畴的内容,因为它并不属于任何一种算法模式。作为算法实现的一种常用形式,递归程序常常让新手望而却步。难在两点,其一是相对于顺序执行的线性代码或重复执行的循环代码,递归程序不是很容易在脑子里形成代码流程,分析代码的时候,常常在几层递归调用之后,就记不得各层递归调用的上下文环境了;其二是递归程序设计比较困难,新手常常感觉无从下手。这一课,我就从递归程序的分析方面分享一些我的经验。
分析递归程序,不要像分析循环或线性程序代码那样,直接带入上下文环境进行死算,因为这样很容易迷失在代码细节中,只见树木、不见森林,最后都记不得哪一层参数是哪一层的上下文环境了。递归体现的是类似与“以此(方法)类推”或“以同样的操作模式(步骤)重复…”这样的思想(有点类似与数学归纳法)。因此,我的经验是先总体上分析一下代码,看看这个递归程序的整体结构是什么,各种类型的递归算法
本文详细探讨了如何分析和设计递归程序,包括递归的三个主要组成部分:退出条件、递归子结构和再触发机制。通过二叉树遍历、汉诺塔和工作站与装配线问题等例子,解释了递归的分析思路,如关注参数传递和递归触发机制。此外,介绍了三种递归模式:同一问题的结构变形、多阶段组合和分解子问题。文章强调设计递归程序时要关注退出条件、递归子结构以及如何通过参数设计触发递归,旨在帮助读者更好地理解和设计递归程序。
订阅专栏 解锁全文
495

被折叠的 条评论
为什么被折叠?



