我正在运行以下代码来尝试递归地模拟河内,但是在运行该代码时,每次在循环中重置[[1,3]]时都会返回列表hlist。我该如何纠正?

def playHanoi(p1,p2,p3,n):
    hlist=[]
    if n==1:
        hlist.append([p1,p3])
    else:
        playHanoi(p1,p3,p2,n-1)
        hlist.append([p1,p3])
        playHanoi(p2,p1,p3,n-1)
    return(hlist)

最佳答案

使用global是做到这一点的一种方法:

hlist = []

def playHanoi(p1,p2,p3,n):
    global hlist
    if n==1:
        hlist.append([p1,p3])
    else:
        playHanoi(p1,p3,p2,n-1)
        hlist.append([p1,p3])
        playHanoi(p2,p1,p3,n-1)
    return(hlist)


第二种(可能更清洁)的方法是使用hlist作为函数参数:

def playHanoi(p1,p2,p3,n, hlist=None):

    if hlist is None:
        hlist = []

    if n==1:
        hlist.append([p1,p3])
    else:
        playHanoi(p1,p3,p2,n-1, hlist)
        hlist.append([p1,p3])
        playHanoi(p2,p1,p3,n-1, hlist)
    return(hlist)

关于python - 列表追加重置递归函数中的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54906196/

10-12 18:10