我需要创建一个采用单个整数的函数,并返回类似于:
的结果pattern(0)
0
pattern(1)
010
pattern(2)
0102010
pattern(3)
010201030102010
and so forth....
输出必须是一个字符串,并像上面一样打印在一行上。 我假设我需要使用某种类型的递归方法和范围函数,但不能在没有硬编码的情况下超越模式(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}
两次。