我需要更改当前函数空桶(in),它会创建一个列表(桶),里面有'n'个列表。
我已经设法让函数减少到基本情况,但不能让它在每次递归上附加一个列表
原始功能
def empty_buckets(n)
buckets = []
for bucket in range(n):
buckets.append([])
print(buckets)
return buckets
新功能
def empty_buckets(n):
buckets = []
if n == 0:
return buckets
else:
return empty_buckets(n-1), buckets.append([])
结果应该是一个等于n数量的列表。即如果n为4,结果将为[[],[],[],[]]
你可以像这样重写你的递归 -
def empty_buckets(n, buckets):
if n == 0:
return buckets # base case - just return the buckets.
else:
buckets.append([]); # append a new empty list to the buckets
return empty_buckets(n-1, buckets) # call recursion along with appended bucket list
print(empty_buckets(4, []))
编辑如果您不想将buckets
传递给方法参数,那么您可以这样做 -
def empty_buckets(n):
if n == 0:
return [];
else:
buckets = empty_buckets(n-1); # call the recursion
buckets.append([]) # append an empty list
return buckets
每个函数都有自己的变量副本(在我们的例子中是桶)。因此,每次调用方法时,它都会将桶重新初始化为空列表,并且永远不会填充。因此,您必须将列表作为参数传递给方法,以便它将修改并提供给您,或者您必须将其拆分为两个方法,如下所示:
def g(buckets):
buckets.append([])
return buckets
def empty(n):
if n == 0:
return []
return g(empty(n - 1))