重写函数以递归执行(Python)

时间:2019-04-03 10:18:56

标签: python python-3.x list recursion append

我需要更改当前函数empty_buckets(n),该函数创建一个列表(存储桶),其中包含“ n”个列表。

我设法使函数减少到基本情况,但无法使它在每次递归时追加一个列表

原始功能

java.nio.charset.Charset

新功能

def empty_buckets(n)
    buckets = []
    for bucket in range(n):
        buckets.append([])
        print(buckets)
    return buckets

结果应为等于n的列表列表。也就是说,如果n为4,则结果将为[[],[],[],[]]

2 个答案:

答案 0 :(得分:0)

您可以像这样重新编写您的递归-

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传递给method参数,则可以执行此操作-

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

答案 1 :(得分:0)

每个函数都有它自己的变量副本(在我们的例子中是bucket)。因此,每次调用该方法时,它都会将存储桶重新初始化为一个空列表,并且永远不会填充它。因此,或者您必须将列表作为参数传递给方法,以便它可以修改并提供给您,或者您必须将其分成两个这样的方法:

def g(buckets):
    buckets.append([])
    return buckets

def empty(n):
    if n == 0:
        return []
    return g(empty(n - 1))