|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
形参和实参 ----------------只写第一次递归
def hanota(n,x,y,z):
if n == 1:
print(x,'--->',z)
else:
hanota(n-1,x,z,y)#将前n-1个盘子从x移到y上
print(x,'-->',z)#将底下的最后一个盘子从x移到z
hanota(n-1,y,x,z)#将y的n-1个盘子移到z上
>>> hanota(3,"a","b","c")
hanota(n,x,y,z) 函数未调用之前是形参
>>> hanota(3,"a","b","c") 开始调用传入实参
传入实参 hanota(3,x="a",y="b",z="c")
不等于1进入else
再次调用hanota(2,"a","c","b")----注意了
这个时候hanota(2,x="a",y="c",z="b")
不等于1再次进入else
这个时候分支1为--hanota(1,"a","b","c")----------这个分支开始递归,为hanota(1,x="a",y="b",z="c") 1==1 print("a",'--->',"c")
分支2为print(x,'-->',z)---------------第二次打印x="a" z="b"(这个x和z是hanota(2,x="a",y="c",z="b")这里面的) ,所以打印结果为print("a",'--->',"b")
分支3为hanota(1,"c","a","b")--------第三次打印开始递归hanota(1,x="c",y="a",z="b") ,,,print(x,'--->',z),,, print结果为("c",'--->',"b")
各位大佬,鱼友们,昨夜顿悟。我分析的对吗
|
|