【问题标题】:Recursion Function Isn't Working递归函数不起作用
【发布时间】:2018-07-14 22:02:43
【问题描述】:

好的,所以我正在尝试创建一个递归函数,如果该函数是回文则返回 True,否则返回 False。但是,它并没有走到尽头,而是随机停止。

代码:


def is_palindrome(word):

    if len(word) == 1 or len(word) == 0:
        return True
    else:
        lst = len(word) - 1
        if word[0] == word[lst]:
            print(len(word), " --> ", word)
            print(word[0], " # ", word[lst])
            is_palindrome(word[0+1:lst])
        else: 
            return False

对于我的一生,我不知道为什么。这是一个示例输出:

7  -->  racecar
r  #  r
5  -->  aceca
a  #  a
3  -->  cec
c  #  c

^ It stops right here. Why doesn't it continue and return True when length = 1?

【问题讨论】:

  • return list(word) == reversed(list(word))

标签: python string recursion palindrome


【解决方案1】:

您需要返回您对递归函数的调用:

def is_palindrome(word):

    if len(word) == 1 or len(word) == 0:
        return True
    else:
        lst = len(word) - 1
        if word[0] == word[lst]:
            print(len(word), " --> ", word)
            print(word[0], " # ", word[lst])
            return is_palindrome(word[0+1:lst])     # change here
        else: 
            return False

您的代码似乎在递归的最后一步停止的原因是因为在这种情况下您实际上从未返回值。在某些编程语言中,例如 C 或 Java,这样的代码甚至无法编译。 Python 似乎可以容忍它,尽管它会导致您当前的行为。

【讨论】:

  • 这很有意义。非常感谢。我现在会更加小心我的递归语句。谢谢!!!
【解决方案2】:

你的函数太长了。 我更喜欢使用string[::-1]

#
def is_palindrome(word):

    return word == word[::-1]

【讨论】:

  • 哈哈,我知道了。但是我不太明白,所以我会避免它。不过谢谢!
猜你喜欢
  • 2018-04-02
  • 2014-04-03
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2012-12-05
  • 2020-07-26
相关资源
最近更新 更多