递归:回文

时间:2015-12-10 23:58:25

标签: python-3.x recursion

所以我有这个代码用于检测字符串是否是回文(相同的向前和向后),我不知道如何将其更改为递归程序

    def isPalindrome(string):
        i = 0
        j = len(string) - 1
        k = 0
        while (i <= j):
            if string[j] != string[i]:
                k = 1
            else:
                i += 1
                j -= 1
        if k == 0:
          return True
        else:
          return False
    def main():
        print("This program tests if strings are palindromes.")
        word = input("Enter a string: ")
        while word != "quit" :
           if isPalindrome(word) == True:
               print(word,"is a palindrome.")
           else:
               print(word,"is not a palindrome.")
           word = input("Enter a string: ")

    main()

我对递归很不好,我真的不明白他们任何帮助都会很棒。感谢

1 个答案:

答案 0 :(得分:1)

没有递归:

理想情况下,您可能不需要递归进行回文检测。它可以简单地完成如下。

def is_palindrome(word):
    if word=="".join(reversed(word)):
        return True
    return False

另一种较短的方法

def is_palindrome(word):
    return word[::-1]==word

使用递归: 出于某些原因,如果您仍然需要递归并且对数组和索引感到满意,请像这样使用它。

def is_palindrome(word, end=0, start=0):
    if end == 0:
        end = len(word)-1
    if start >= end:
        return True
    if word[start] != word[end]:
        return False
    start = start+1
    end = end-1
    return is_palindrome(start, end, word)

word = 'ramar'
print (is_palindrome(word))

这将是更多Pythonic方式的递归

def is_palindrome(word):
    if not word:
        return True
    else:
        return word[0]==word[-1] and is_palindrome(word[1:-1])