【发布时间】:2016-08-08 22:19:56
【问题描述】:
我在带有累加器的列表列表上使用递归函数,但不是创建正确的列表列表,而是创建一个列表,其中包含插入累加器中的最后一项的重复项。我在一个更简单的递归函数和列表中重新创建了这个问题。该函数获取一个列表并复制 2 份并将它们反转 n 次。
def recursauto(x, n, instSet):
#Base Case
if(n==0):
instSet.append(x)
print(x) #Print to see what SHOULD be added
else:
temp = [x]*(2) # Make a list with 2 copies of the original list
for i in range(len(temp)):
temp[i][i] = temp[i][i][::-1] # Make the list backwards
for i in range(2):
recursauto(temp[i], n-1, instSet) #Input each element
MyList = [] #Empyt list for accumulator
print("Correct output:")
recursauto([["A", "l", "e", "x"], ["A", "b", "d", "a", "l", "a", "h"]], 2, MyList)
print("Wrong printed list:")
for i in MyList:
print(i) #Print what is in the accumulator
输出错误,累加器没有放入正确的东西。
Correct output:
[['A', 'l', 'e', 'x'], ['A', 'b', 'd', 'a', 'l', 'a', 'h']]
[['A', 'l', 'e', 'x'], ['A', 'b', 'd', 'a', 'l', 'a', 'h']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
Wrong printed list:
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
我知道有一种更简单的方法可以做到这一点,但我实际制作的函数需要递归。就像我说的,这只是我遇到的问题的简化再现。
【问题讨论】:
-
正确的输出是什么?
-
正确的输出是进入累加器的列表。这与输出中“错误打印列表:”行之前的打印内容相同。
-
递归函数的目的是什么?
-
它只是创建 2 个副本,每 n 次反转字符串。
标签: python list recursion user-defined-functions