列表追加可重置递归函数中的列表

时间:2019-02-27 13:05:03

标签: python python-3.x list recursion

我正在运行以下代码来尝试递归模拟河内,但是每次运行[[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)

2 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:0)

hlist仅在函数中定义。如果首先定义hlist = [],则每次使用hlist.append([tobeappended])都会附加到(全局)列表中。