我正在运行以下代码来尝试递归模拟河内,但是每次运行[[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)
答案 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])都会附加到(全局)列表中。