递归模式取输入整数并返回回文

时间:2014-08-20 17:17:47

标签: python algorithm recursion

我需要创建一个采用单个整数的函数,并返回类似于:

的结果
pattern(0)
0
pattern(1)
010
pattern(2)
0102010
pattern(3)
010201030102010
and so forth....

输出必须是一个字符串,并像上面一样打印在一行上。 我假设我需要使用某种类型的递归方法和范围函数,但不能在没有硬编码的情况下超越模式(2)。如果有人可以指出我正确的方向,非常感谢。

2 个答案:

答案 0 :(得分:2)

这样的事情会做你需要的。 以它为例,看看你的方法做了什么不同。

#Start with a base case of 0 = "0" and fill in the results as they are computed
def n(x, m={0:'0'}):
    if x not in m:
        #Didn't have the answer, lets compute it.
        m[x] = '{0}{1}{0}'.format(n(x-1), x)

    #Look up what the answer is because we already computed it
    return m[x]

for x in range(5):    
    print(n(x))

结果:

0
010
0102010
010201030102010
0102010301020104010201030102010

要处理大于9的整数的情况,你可以尝试这样的事情:

def n(x, m={0:'0'}):
    if x not in m:
        lX = x
        if x > 9:
            lX = str(x)
            #Take the integer like 123, format it and swap 
            #it but share the last character. i.e. 123 -> 12321
            lX = '{}{}'.format(x,lX[::-1][1:])

        m[x] = '{0}{1}{0}'.format(n(x-1), lX)
    return m[x]

答案 1 :(得分:2)

这是一个基本的递归解决方案。它使用与rdp's answer相同的方法,但没有记忆(这可能是不必要的,因为我们只需要递归一次,当你超过n=9时回文结构就会崩溃):

def reflected_palindrome(n):
    if n == 0:
        return "0" # base case

    return "{0}{1}{0}".format(reflected_palindrome(n-1), n)

这使用字符串格式在递归情况下组合结果。递归调用的结果重复两次,因为格式字符串引用{0}两次。