递归在python中如何工作?

基兰·拉维尔(Kieran Lavelle)

几个小时前,我观看了有关python递归的视频,然后重新创建了视频中制作的程序,因此该程序可以在我的Python版本中使用。该代码可以正常工作,但是有些地方我还不太了解它在做什么。

def lower(s):
    s = s.lower()
    return s

def isPal(s):
    if len(s) <= 1:
        return True
    else:
        return s[0] == s[-1] and isPal(s[1:-1])

def isPalindrome(s):
    if isPal(lower(s)) == True:
        print("{0} is a palindrome".format(s))

我遇到的问题是

return s[0] == s[-1] and isPal(s[1:-1])

我想知道的是为什么要归还它们,如果您认为知道任何可以简化递归的好地方,为什么要返回[[1:-1]而不是s [0:-1]?分享。提前致谢。

马辛

为什么是s [1:-1]而不是s [0:-1]

s[1:-1]返回s时,第一个和最后一个元素被切掉。s[0:-1]返回s,仅切掉最后一个元素。

您需要砍掉两端以保留回文属性(如果是回文),这是与中间等距的元素是相同的。如果仅切掉一端,则移动中间的那根(通常情况下)会破坏该不变式。

这涉及到自我递归的核心:您做一件事,然后委派一个具有相同属性的简单案例。

为什么返回s [0] == s [-1]和isPal(s [1:-1])

之所以返回此值,是因为它首先检查第一个和最后一个元素是否具有回文属性(如上所述),并且下一个“层”也具有该属性。如果外部对不相等,则不是回文,False将返回。如果为true,则执行递归步骤;如果为True,则整个表达式返回True

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

递归在Elixir中如何工作

来自分类Dev

Python递归生成器如何工作?

来自分类Dev

递归函数在Lisp中如何工作?

来自分类Dev

递归如何在堆排序中工作?

来自分类Dev

在此递归Clojure代码中,“ for”如何工作?

来自分类Dev

C中的递归函数如何工作

来自分类Dev

Java中的数字递归如何工作?

来自分类Dev

递归函数在MIPS中如何工作?

来自分类Dev

(共)递归定义在Haskell中如何工作?

来自分类Dev

递归如何在此代码中工作?

来自分类Dev

递归在以下代码中如何工作?

来自分类Dev

递归在这段代码中是如何工作的

来自分类Dev

“导入”何时在 Python 中递归工作

来自分类Dev

快速排序Python递归-递归函数如何工作

来自分类Dev

线性递归如何工作?

来自分类Dev

递归方法如何工作?

来自分类Dev

如何使chown递归工作?

来自分类Dev

如何使 DjangoTemplates 递归工作

来自分类Dev

循环内的Python递归调用。它是如何工作的?

来自分类Dev

循环内的Python递归调用。它是如何工作的?

来自分类Dev

python装饰器如何与递归一起工作?

来自分类Dev

难以理解元组递归在Haskell中如何工作

来自分类Dev

了解堆栈框架如何在递归函数中工作

来自分类Dev

我对递归函数中变量如何工作的理解是否正确?

来自分类Dev

递归在这段代码中究竟是如何工作的

来自分类Dev

如何在Python中解决递归关系

来自分类Dev

如何增加Python中的最大递归深度?

来自分类Dev

如何处理python中的递归错误?

来自分类Dev

Python如何在递归函数中求和?