持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
python 中的回文
递归对于许多不涉及数字的问题也很有用。Eigure 6-4.包含一个函数 is_palindrome,用于检查字符串的向后和向前读取方式是否相同。
函数 is_palindrome 包含两个内部帮助程序函数。对于函数的客户端来说,这应该不感兴趣,他们应该只关心is_palindrome的实现是否符合其规范。但你应该关心,因为通过检查实现有些东西需要学习。
帮助程序函数to_chars将所有字母转换为小写字母并删除所有非字母。它首先在字符串上使用内置方法来生成与 s 相同的字符串,只是所有大写字母都已转换为小写字母。
帮助程序函数is_pal使用递归来完成实际工作。两个基本情况是长度为零或一的字符串。这意味着实现的递归部分仅在长度为 2 或更长的字符串上到达。else 子句中的连词 45 从左到右计算。代码首先检查第一个和最后一个
字符是相同的,如果是,请继续检查字符串减去这两个字符是否是回文。在此示例中,除非第一个连词的计算结果为 True,否则不会计算第二个连词,这在语义上是无关紧要的。但是,在本书的后面,我们将看到一些例子,其中布尔表达式的这种短路评估在语义上是相关的。
这种is_palindrome的实现是一个重要的解决问题原则的例子,称为分而治之。(这个原理与分而治之的算法有关,但略有不同,后者在第12章中讨论。解决问题的原则是通过将难题分解为一组具有以下属性的子问题来征服它。
·子问题比原始问题更容易解决。子问题的解决方案可以组合以解决原始问题。
分而治之是一个古老的观念。尤利乌斯·凯撒实践了罗马人所说的分而治之(分而治之)。英国人出色地实践了它来控制印度次大陆。本杰明·富兰克林非常了解英国使用这种技术的专业知识,这促使他在签署美国独立宣言时说:“我们必须团结在一起,否则我们肯定会分开悬挂。
在这种情况下,我们通过把原始问题分解成同一问题的更简单版本(检查较短的字符串是否是回文)和我们知道如何做的简单事情(比较单个字符)来解决问题,然后将解决方案与逻辑运算符和组合在一起。图 6-5 包含一些代码,可用于可视化其工作原理。
执行代码
打印