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

Python 获取输入整数并返回回文的递归模式,python,algorithm,recursion,Python,Algorithm,Recursion,我需要创建一个接受单个整数的函数,并返回类似以下内容的结果: pattern(0) 0 pattern(1) 010 pattern(2) 0102010 pattern(3) 010201030102010 and so forth.... 输出必须是一个字符串,并像上面那样全部打印在一行上。 我假设我需要使用某种类型的递归方法和范围函数,但如果没有硬编码,就无法通过模式(2)。如果有人能给我指出正确的方向,我将不胜感激 像这样的东西可以满足你的需要。 以它为例,看看你的方法有什么不同 #S

我需要创建一个接受单个整数的函数,并返回类似以下内容的结果:

pattern(0)
0
pattern(1)
010
pattern(2)
0102010
pattern(3)
010201030102010
and so forth....
输出必须是一个字符串,并像上面那样全部打印在一行上。
我假设我需要使用某种类型的递归方法和范围函数,但如果没有硬编码,就无法通过模式(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]

像这样的东西可以满足你的需要。 以它为例,看看你的方法有什么不同

#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]

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


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

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


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

请查看您提供的每个示例之间的差异,你知道如何在不使用计算机的情况下编写模式吗?模式的第五个元素是什么?第六个是什么?您采取了哪些步骤来推导这些结果?对于每个数字1..(2^(n+1)-1),在其二进制表示中写入终止零的数量。您尝试了什么?展示一些代码,告诉我们哪里不起作用(实际结果与预期结果,或错误消息),你知道如何在不使用计算机的情况下编写模式吗?模式的第五个元素是什么?第六个是什么?您采取了哪些步骤来推导这些结果?对于每个数字1..(2^(n+1)-1),在其二进制表示中写入终止零的数量。您尝试了什么?显示一些代码,告诉我们它在哪里不起作用(实际结果与预期结果或错误消息)。如果您反转
If
的条件,您可以将递归调用和赋值放到
m[x]
中,然后在最后无条件地
返回m[x]
。如果您想要一个迭代版本,那么这种结构也是很好的。只需将
m
设为一个列表(最初为
[“0”]
),并在返回
m[x]
之前在循环中附加尽可能多的新值:
而x>=len(m):m.append({0}{1}{0})。format(m[-1],len(m))
交换if条件的好方法。已更新。如果将
If
的条件反转,则可以将递归调用和赋值放在
m[x]
中,然后在末尾无条件地
返回m[x]
。如果您想要一个迭代版本,那么这种结构也是很好的。只需将
m
设为一个列表(最初为
[“0”]
),并在返回
m[x]
之前在循环中附加尽可能多的新值:
而x>=len(m):m.append({0}{1}{0})。format(m[-1],len(m))
交换if条件的好方法。更新。您可以使用类似于:{}{}的格式(10,str(10)[::-1][1:])将10转换为101并维护大于9的整数的回文结构。您可以使用类似于:{}{}的格式(10,str(10)[::-1][1:])将10转换为101并维护大于9的整数的回文结构。