所以我有这个代码用于检测字符串是否是回文(相同的向前和向后),我不知道如何将其更改为递归程序
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()
我对递归很不好,我真的不明白他们任何帮助都会很棒。感谢
答案 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])