使用递归检查回文

时间:2016-05-07 06:36:10

标签: python python-2.7 recursion

我使用以下代码检查字符串是否为回文结构。但是当字符串是回文时它返回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")

1 个答案:

答案 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")