我想写返回true的Python函数一个字符串s是回文,也就是等于它的反。例如,“赛车”和“abba”是回文。到目前为止,这是我不成功的尝试。
def ispalindrome(s):
if len(s) == 1:
return s
else:
reverse = s[-1] + ispalindrome(s[:-1])
当我告诉我的函数返回相反的结果时,我没有问题,但是,我不知道应该如何进行比较才能返回一个布尔值。
def ispalindrome(s):
if len(s) == 1:
return s
else:
reverse = s[-1] + ispalindrome(s[:-1])
return a == reverse
使用上面的函数会产生以下错误
>>>ispalindrome('racecar')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
ispalindrome('racecar')
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
TypeError: Can't convert 'bool' object to str implicitly
现在我完全理解为什么会产生上述错误。这是因为一些递归函数返回一个boool并尝试将其添加到字符串中;但是我做不到的是如何避免这个错误。
一个更好的回文递归测试可能只是确保结束字符相同,然后内部字符也是一个回文,终止条件是以一个零或一个字符的字符串结束(定义为回文):
def isPalindrome(s):
if len(s) < 2:
return True
if s[0] != s[-1]:
return False
return isPalindrome(s[1:-1])
print isPalindrome("racecar")
当您只能处理字符串的一端时,很难创建一个优雅的递归解决方案来解决这个问题,因为您需要传递原始字符串进行比较,传递您当前正在反转的字符串的剩余部分,以及到目前为止反转的字符串,如下所示:
def isPalindrome(orig, reduced, reversed):
if reduced == "":
return orig == reversed
return isPalindrome(orig, reduced[1:], reduced[0] + reversed)
print isPalindrome("racecar", "racecar", "")
当然,递归地执行此操作的整个想法是有缺陷的,对于教育以外的任何东西(因为教育可能是您在这里的目标,因此可以作为示例)。
但是请记住,递归的最佳用例是,每次递归调用都可以处理一大块“解决方案空间”(见二进制搜索,每次可以处理一半剩余空间)。
对于递归回文函数来说,足够大的字符串将具有与以下函数相同的效果,这是递归领域算法选择不佳的经典情况:
def add(unsigned a, unsigned b):
if b == 0:
return a
return add(a+1, b-1)
因为在得到答案之前,您可能会耗尽堆栈空间:-)
我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }
问题内容: 我编写了以下函数,以实现自己的二进制搜索 我知道我的实现已经关闭,但是我对理解递归堆栈更加好奇。 当我调用时,我的函数应返回的值 但相反,它返回None。此外,当我直接调用时 ,我得到的正确值为0。这怎么可能? 问题答案: 您将忽略递归调用的返回值。您还需要 显式地 返回它们: 递归调用与其他任何函数调用一样;他们将结果返回给调用者。如果忽略返回值,然后调用函数结束,那么您将以该调用函
我接受了一次采访,被问到一个问题,我想了解解决方案。 创建一个递归函数,该函数返回给定长度的数组的可能组合数,这些数组可以由非重复连续整数数组组成。 f(数组,长度)=组合 数组=[0,1,2,3] 长度=2 组合=10(所有组合:[0,0][0,1][0,2][0,3][1,1][1,2][1,3][2,2][2,3][3,3]) 请注意,允许使用[0,0],但不允许使用[1,0],因为定义了[
我正在编写一个递归函数,如下所示: 此函数用于接收员工并查找其管理者。如果找到管理器,则将管理器id推送到数组中($)- 所以我的问题是,如果我不在第6行返回递归调用(这是-
我有一个数组,如果两个相邻的数被10除,它将返回true。现在它的回报总是假的。