掌握递归编程[关闭]

2023-12-30

我在递归方面思考/解决问题时遇到困难。我真的很欣赏这个概念,我可以理解它们,例如创建基本情况、退出情况和递归调用等。我可以解决简单的问题,例如在数组中编写阶乘或整数求和。这就是我的思考停止的地方。当问题变得复杂时,我无法真正应用这些概念或提出解决方案。例如,河内塔,虽然我能理解问题和解决方案,但我自己无法想出解决方案。它也适用于其他算法,例如快速排序/二叉树遍历。所以我的问题是

  1. 掌握它的最佳方法是什么?
  2. 任何人都可以提出一系列问题或问题,我可以用它作为练习来练习吗?
  3. 学习功能性语言会帮助我理解吗?

请指教。


递归只是一种思维方式,就像迭代一样。当我们还是孩子的时候,我们并没有被教导如何递归地思考,这才是真正的问题所在。你需要将这种思维方式融入你的武器库中,一旦你这样做了,它就会永远留在那里。

最好的掌握方法:

我发现始终首先弄清楚基本情况很有用,也许一开始它们不是最简单的,但是一旦您开始在基本情况之上构建递归,您就会意识到可以简化它。确定基本情况的重要性在于,首先,您专注于需要以最简单的形式(更简单的情况)解决的问题,这以某种方式为未来的算法绘制了路线图,其次,您确保算法stops。也许不会返回预期的结果,但至少会停止,这总是令人鼓舞的。

此外,它总是有助于弄清楚问题的一个小实例如何帮助您找到问题的更大实例的解决方案。例如,如何构建输入解决方案n已经有了输入的解决方案n-1.

递归地解决你能想到的每一个问题。是的,河内塔不是一个很好的例子,它的递归解决方案是非常聪明的解决方案。尝试更简单的问题,几乎是基本问题。

问题清单

  1. 数学运算:求幂以及您能想到的所有数学运算。
  2. 字符串处理:回文是一个非常好的练习。在网格中查找单词也很有用。
  3. 了解树数据结构:在我看来,这尤其是最好的培训。树是递归数据结构。了解它们的遍历(中序、后序、前序、计算其高度、直径等)。几乎树状数据结构上的每一个操作都是一个很好的练习。
  4. 组合问题:非常重要,组合、排列等。
  5. 寻找路径:Lee算法、迷宫算法等

但最重要的是,从简单的问题开始。几乎每个问题都有递归解决方案。数学问题非常适合掌握它。每次你看到一个for循环或一个while循环,将该算法转化为递归。

编程语言

函数式编程很大程度上依赖于递归。我认为这不会有太大帮助,因为它们本质上是递归的,对于还不太了解递归的用户来说可能很麻烦。

使用一种简单的编程语言,即您最熟悉的语言,最好是一种不会让您的大脑因内存烦恼和指针而烦恼的语言。在我看来,Python 是一个非常好的开始。非常简单,不会打扰您打字或复杂的数据结构。只要该语言能帮助你只专注于递归,那就更好了。

最后一个建议,如果您找不到问题的解决方案,请在互联网上搜索或寻求帮助,完全理解它的作用并继续进行另一个。不要让他们绕过你,因为你想做的是将这种思维方式融入你的头脑.

To 主递归,你首先需要主递归 :)

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

掌握递归编程[关闭] 的相关文章

  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • java数据结构模拟数据树

    我需要帮助定义使用什么方法 我有一个 SOAP 响应 给我一个 xml 文件 我需要在屏幕上显示 3 个相关列表 当您在第一个列表中选择一个项目时 相应的选择将出现在第二个列表中 依此类推 我只对从 xml 流中提取数据后如何有效地组织数据
  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 在 Python 中进行模糊键查找的最佳方法?

    我遇到一个问题 我需要在哈希映射中进行模糊查找 即返回与最接近查询的键相对应的值 在我的例子中是通过 Levenshtein 距离测量的 我目前的方法是子类化dict使用特殊的查找方法计算所有键的编辑距离 然后返回得分最低的键的值 基本上是
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 多 AVL 树旋转

    假设我有一个无序集合 s 3 6 5 1 2 4 并且我需要构造一个 AVL 树 就这么多了 我了解基本的旋转 我在这里达到这一点 5 2 6 1 3 但当我尝试插入 4 时 一切都崩溃了 我得到的最终答案是 左边的 4 But the a
  • 递归方法比交互式方法慢 10 倍 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 代码已尽可
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 在Racket中将结构递归转化为累积递归

    我有一些代码来查找最大高度并将其替换为关联的名称 身高和姓名有单独的列表 每个列表的长度相同且非空 我可以使用结构递归来解决这个问题 但必须将其更改为累积递归 而且我不确定如何做到这一点 我见过的所有例子都让我困惑 有人能够将代码变成使用累
  • 在堆栈已满并给出分段错误之前,C/C++ 中的最大递归函数调用次数?

    我正在做一个问题 我使用递归函数来创建线段树 对于较大的值 它开始出现分段错误 所以我之前认为可能是因为数组索引值越界 但后来我认为这可能是因为程序堆栈太大 我编写这段代码是为了计算系统出现段错误之前允许的最大递归调用次数 include
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 如何在递归调用函数时阻止 bash 创建子 shell

    这是一个计算阶乘的简单 shell 函数 bin bash function factorial if 1 lt 2 then echo 1 else echo 1 factorial 1 1 fi factorial 1 但我发现这个脚本
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 如何用流程图表示递归函数?

    我需要在流程图上表示递归函数 我的问题是我不知道如何指示该函数可以一次在多个元素上调用自身 例如扫描图形的函数 有人有什么建议吗 在流程图中 您通常不会为循环之类的内容添加多次调用 您只需指示可以重复调用代码 直到满足条件为止 因此 对于递

随机推荐