回文递归函数
Palindrome recursive function
我试图编写一个 递归 函数来判断字符串是否为回文,但我得到的只是一个无限循环,我不知道问题出在哪里
def isPalindrome(S):
listush=list(S) #listush=['a', 'b', 'n', 'n', 'b', 'a']
length=len(listush) #length=6
if length==0 or length==1:
return S, "is a palindrome!"
elif listush[0]!=listush[-1]:
return S, "is not a palindrome!"
else:
del listush[0]
del listush[-1]
return isPalindrome(S)
print isPalindrome("abnnba")
首先,正确缩进代码。
其次,您使用相同的参数再次调用该函数。使用要从中删除或从 'S' 中删除的 'listush' 列表调用并使用 S 参数递归。
如果您执行 print(listush)
,您会发现您的列表永远不会改变。
您的代码的以下修改有效:
def isPalindrome(testStr, orig=None):
if orig is None:
orig = testStr
length = len(testStr) #length=6
print(testStr)
if length == 0 or length == 1:
return orig, "is a palindrome!"
elif testStr[0] != testStr[-1]:
return orig, "is not a palindrome!"
else:
return isPalindrome(testStr[1:-1], orig)
print isPalindrome("abnnba")
无需创建列表。 python 字符串已经是一个可索引序列。
更好的是,我们可以使用切片并让函数 return True
和 False
而不是带有文本的元组,有了所有这些, isPalindrome()
就变成了一行:
def isPalindrome(S):
return len(S) < 2 or (S[0] == S[-1] and isPalindrome(S[1:-2]))
print isPalindrome('A')
>>> True
print isPalindrome('AA')
>>> True
print isPalindrome('BAAB')
>>> True
print isPalindrome('ABAB')
>>> False
关于您的代码,我想说几句
- 您可以发送列表的一部分,省去删除的麻烦
元素。
- 你不需要将它转换成列表,你需要的所有操作
字符串支持寻找回文。
- 你在递归函数中 returning S,这将是一个
空列表(或字符串),因为它正在减少每次递归。在
递归情况,我建议你只 return
True
或 False
这是一个例子。
def isPalindrome(S):
length=len(S)
if length < 2:
return True
elif S[0] != S[-1]:
return False
else:
return isPalindrome(S[1:length - 1])
就这么简单。
希望对您有所帮助
def ispalindrome(word):
if len(word)<=1:
print("Palindrome")
return
else:
if word[0]!=word[-1]:
print("Not a palindrome")
return
return ispalindrome(word[1:len(word)-1])
word=input("Enter word ")
ispalindrome(word)
我试图编写一个 递归 函数来判断字符串是否为回文,但我得到的只是一个无限循环,我不知道问题出在哪里
def isPalindrome(S):
listush=list(S) #listush=['a', 'b', 'n', 'n', 'b', 'a']
length=len(listush) #length=6
if length==0 or length==1:
return S, "is a palindrome!"
elif listush[0]!=listush[-1]:
return S, "is not a palindrome!"
else:
del listush[0]
del listush[-1]
return isPalindrome(S)
print isPalindrome("abnnba")
首先,正确缩进代码。
其次,您使用相同的参数再次调用该函数。使用要从中删除或从 'S' 中删除的 'listush' 列表调用并使用 S 参数递归。
如果您执行 print(listush)
,您会发现您的列表永远不会改变。
您的代码的以下修改有效:
def isPalindrome(testStr, orig=None):
if orig is None:
orig = testStr
length = len(testStr) #length=6
print(testStr)
if length == 0 or length == 1:
return orig, "is a palindrome!"
elif testStr[0] != testStr[-1]:
return orig, "is not a palindrome!"
else:
return isPalindrome(testStr[1:-1], orig)
print isPalindrome("abnnba")
无需创建列表。 python 字符串已经是一个可索引序列。
更好的是,我们可以使用切片并让函数 return True
和 False
而不是带有文本的元组,有了所有这些, isPalindrome()
就变成了一行:
def isPalindrome(S):
return len(S) < 2 or (S[0] == S[-1] and isPalindrome(S[1:-2]))
print isPalindrome('A')
>>> True
print isPalindrome('AA')
>>> True
print isPalindrome('BAAB')
>>> True
print isPalindrome('ABAB')
>>> False
关于您的代码,我想说几句
- 您可以发送列表的一部分,省去删除的麻烦 元素。
- 你不需要将它转换成列表,你需要的所有操作 字符串支持寻找回文。
- 你在递归函数中 returning S,这将是一个
空列表(或字符串),因为它正在减少每次递归。在
递归情况,我建议你只 return
True
或False
这是一个例子。
def isPalindrome(S):
length=len(S)
if length < 2:
return True
elif S[0] != S[-1]:
return False
else:
return isPalindrome(S[1:length - 1])
就这么简单。
希望对您有所帮助
def ispalindrome(word):
if len(word)<=1:
print("Palindrome")
return
else:
if word[0]!=word[-1]:
print("Not a palindrome")
return
return ispalindrome(word[1:len(word)-1])
word=input("Enter word ")
ispalindrome(word)