重写函数以递归方式执行(python)

问题描述 投票:1回答:2

我需要更改当前函数空桶(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,结果将为[[],[],[],[]]

python python-3.x list recursion append
2个回答
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传递给方法参数,那么您可以这样做 -

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

0
投票

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

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

def empty(n):
    if n == 0:
        return []
    return g(empty(n - 1))
© www.soinside.com 2019 - 2024. All rights reserved.