我使用以下代码检查字符串是否为回文结构。但是当字符串是回文时它返回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")
答案 0 :(得分:0)
您需要在函数中返回递归的结果:
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
时执行重复工作。为避免重复的函数调用并大大提高算法的性能,您可以考虑 memoization 。否则,你可能会建立一个大的调用堆栈并可能导致stack overflow error(嘿,这就是网站的名称......)。
这是通过在函数周围构建类来实现memoization的一种可能方法:
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")