【问题标题】:Rewrite function to perform recursively (python)重写函数以递归执行(python)
【发布时间】:2019-08-24 20:11:29
【问题描述】:

我需要更改我当前的函数 empty_buckets(n),它会创建一个列表(桶),其中包含“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,结果将是 [[],[],[],[]]

【问题讨论】:

  • 我不确定这是一个递归问题,在我看来你可以做return [[] for _ in range(n)]

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


【解决方案1】:

你可以像这样重写你的递归 -

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

【讨论】:

  • 是否可以在函数体内使用“buckets”来实现这一点。抱歉,我对编程很陌生
  • @Mathias91 我用不同的方法编辑了我的答案,没有在参数中传递buckets
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 2020-09-16
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2013-05-05
    相关资源
    最近更新 更多