所以我希望使用一个函数来获取一个列表,然后按顺序打印一行上的每个项目,然后使用递归和无循环向后打印项目。
该函数的[1, 2, 3]
输入列表将返回
1
2
3
2
1
任何人都可以帮我一把吗?
答案 0 :(得分:0)
您的问题可以以递归友好的方式表达如下:
给出一个字符串" a_1.a_2 ... a_n"生成字符串" a_1.a_2 ... a_n.a_ {n-1} ... a_1"。 (a_1,a_2等是字符。"。"简单地用作视觉分隔符。)
让我们说看起来像你想要的答案的字符串是S
。我们知道S
的第一个和最后一个字母是a_1
。因此,对于某些字符串S
,a_1.T.a_1
看起来像T
。可是等等! T
实际上是我们得到的答案,如果输入的字符串是a_2.a_3...a_n
。这就是递归。
def make_palindrome (input):
if len(input) <= 1:
return input
return input[0] + make_palindrome(input[1:]) + input[0]
def print_palindrome (input):
print "{}".format(make_palindrome(input))
答案 1 :(得分:0)
不生成任何中间列表;这里的技巧是在从递归调用返回后执行第二次打印(除了最后一个元素,只打印一次):
def p(lst):
if lst: # at least one element
print(lst[0]) # print first element
if len(lst) > 1: # if it's not the last element (which is not printed twice)
p(lst[1:]) # recursive call with the rest of the list
print(lst[0]) # and print first element again
然后
>>> p([1,2,3])
1
2
3
2
1