我使用了以下代码来检查字符串是否为回文。但是,当字符串是回文时,它将返回None。
def check(a):
if len(a)==1 or len(a)==0:
return True
if a[0]==a[len(a)-1]:
check(a[1:len(a)-1])
else:
return False
print check("radar")
发布于 2016-05-07 23:19:34
您需要在函数中返回递归的结果:
def check(a):
# Base Case
if len(a) < 2:
return True
# Recursive Call
if a[0] == a[-1]:
check(a[1:-1])
else:
return False
return check(a[1:-1])
print check("radar")
奖金信息
函数在检查字符串a
时执行重复工作。为了避免重复的函数调用,并大大提高算法的性能,您可以考虑回忆录。否则,您可以构建一个大型调用堆栈,并可能导致stack overflow error (嘿,这是网站的名称.)。
下面是实现回忆录的一种可能的方法,方法是围绕您的函数构建一个类:
class check:
def __init__(self):
self.memo = {}
def Check(self, a):
# Base Case
if len(a) < 2:
return True
# Check Memo
if a in self.memo:
return self.memo[a]
# Recursive Call
if a[0] == a[-1]:
self.Check(a[1:-1])
else:
return False
# Memoize
self.memo[a] = True
return self.Check(a[1:-1])
print check().Check("rats live on no evil star")
https://stackoverflow.com/questions/37085343
复制