【问题标题】:saving the result of the recursion iterations保存递归迭代的结果
【发布时间】:2020-07-16 09:03:53
【问题描述】:

这是一个标准的置换函数。我想返回排列列表的列表) 你能帮我存储递归迭代的结果吗?例如,此代码返回废话。如果没有全局变量并且rezulting list在func里面就完美了

谢谢!

'''

z=[]
def func(N,M=-1,pref=None):
global z
if M == -1:
    M = N
pref = pref or []
if M==0:
    z.append(pref)
    print(pref)
for i in range(N):
    if i not in pref:
        pref.append(i)
        func(N,M-1,pref)
        pref.pop()

func(3)
print(z)

'''

【问题讨论】:

    标签: python-3.x recursion


    【解决方案1】:

    您将一个列表(for 循环中的pref 变量)引用传递给您的函数,并且从中删除了一个项目,这就是为什么您以一个空列表结尾z

    在将其传递给函数之前创建一个新列表或复制该列表以避免这种情况。

    z = []
    
    
    def func(N, M=-1, pref=None):
        global z
        if M == -1:
            M = N
        pref = pref or []
        if M == 0:
            z.append(pref)
            print(pref)
        for i in range(N):
            if i not in pref:
                pref.append(i)
                func(N, M - 1, pref[:])
                pref.pop()
    
    
    func(3)
    print(z)
    

    为了更好地理解,请阅读这个。 List changes unexpectedly after assignment. How do I clone or copy it to prevent this?

    【讨论】:

    • 是否可以将'z'列表放入func?
    【解决方案2】:

    如果你想拥有某种累加器,你必须将它传递给递归函数,小心它可能是一场噩梦。

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多