首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提高你对递归的理解的资源?

提高你对递归的理解的资源?
EN

Software Engineering用户
提问于 2011-03-11 22:06:26
回答 8查看 5.2K关注 0票数 13

我知道什么是递归(当一个patten在它的内部重新出现时,通常是一个在它的一行上调用自己的函数,在一个分拆条件之后.对吧?),如果我仔细研究递归函数,我可以理解它们。我的问题是,当我看到新的例子时,我一开始总是感到困惑。如果我看到一个循环,或者一个映射,压缩,嵌套,多态调用等等,我就知道通过查看它会发生什么。当我看到递归代码时,我的思维过程通常是‘这是吗?’后面跟着“噢,这是递归的”,然后是“我想它必须工作,如果他们说它有效的话。”

那么,你有什么技巧/计划/资源来培养这方面的技能吗?递归是一个奇怪的概念,所以我认为解决它的方法可能也是同样的奇怪和不明显。

EN

回答 8

Software Engineering用户

发布于 2011-03-11 22:22:34

从一些简单的东西开始,用铅笔和纸来追踪它。是认真的。树遍历算法是一个很好的起点,因为它们比常规迭代更容易使用递归来处理。它不一定是一个复杂的例子,但它是简单的,你可以使用。

是的,这是奇怪的,有时违反直觉,但一旦它点击,一旦你说“尤里卡!”我建议树是递归过程中最容易理解的结构,而且很容易使用铅笔和纸。;)

票数 10
EN

Software Engineering用户

发布于 2011-03-12 08:29:48

我绝对建议SICP。另外,你应该看看作者的入门课程视频这里;它们令人难以置信地打开了心灵。

另一条与编程无关的道路是读“哥德尔”、“埃舍尔”、“巴赫:永恒的金色辫子”。一旦你通过它,递归看起来就像算术一样自然。另外,你会相信P=nP和你会想要构建思考机器--但它的副作用与好处相比却是如此之小。

票数 4
EN

Software Engineering用户

发布于 2011-03-11 22:24:11

从本质上说,这只是在练习.参加一般问题(排序、搜索、数学题等)如果您多次应用单个函数,那么看看是否可以找到解决这些问题的方法。

例如,快速排序操作是将列表中的元素移动到两个部分,然后再将自己应用到这两个部分中的每一个。当初始排序发生时,它并不担心在这一点上将这两部分排序。相反,它采用枢轴元素,将所有小于该元素的元素放在一边,将大于或等于的所有元素放置在另一侧。这有意义吗?在那个时候,它如何递归地调用自己来排序这两个新的较小的列表?他们也是名单。只是更小。但他们仍然需要被分类。

递归背后的力量是分而治之的概念。反复地把一个问题分解成性质相同但只是小一些的小问题。如果你做的足够多,最终你就会到达一个唯一剩下的部分已经被解决的地步,那么你只需从循环中返回,问题就解决了。学习你提到的那些例子,直到你理解它们。这可能需要一段时间,但最终会变得更容易。然后尝试处理其他问题,并创建一个递归函数来解决这些问题!祝好运!

编辑:我还必须补充,递归的一个关键元素是保证函数能够停止。这意味着原问题的分解必须不断地变小,最终需要有一个有保证的停止点(在这个点上,新的子问题要么是可解的,要么已经解决)。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/57243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档