Python递归螺旋列表打印

时间:2014-12-28 07:41:34

标签: python recursion

所以我希望使用一个函数来获取一个列表,然后按顺序打印一行上的每个项目,然后使用递归和无循环向后打印项目。

该函数的[1, 2, 3]输入列表将返回

1
2
3
2
1

任何人都可以帮我一把吗?

2 个答案:

答案 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。因此,对于某些字符串Sa_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