汉诺塔已解决
形参和实参 ----------------只写第一次递归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==1print("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")
各位大佬,鱼友们,昨夜顿悟。我分析的对吗
对的。就是酱紫 sunrise085 发表于 2020-8-5 11:59
对的。就是酱紫
谢谢大佬前几次的指点,非常感谢 请问一下,计算机怎么知道a,b,c的位置怎么比变换的,为什么n=2时x=a,z=b Bessyyi 发表于 2020-9-6 11:55
请问一下,计算机怎么知道a,b,c的位置怎么比变换的,为什么n=2时x=a,z=b
这位鱼友,我也是刚学的,我理解的是 Bessyyi 发表于 2020-9-6 11:55
请问一下,计算机怎么知道a,b,c的位置怎么比变换的,为什么n=2时x=a,z=b
hanota(3,"a","b","c") 开始调用传入实参
传入实参hanota(3,x="a",y="b",z="c")
不等于1进入else
再次调用hanota(2,"a","c","b")----注意了-------hanota(2,x,z,y)再次调用函数的时候变的
这个时候hanota(2,x="a",y="c",z="b") ] 一起打卡学习 排三技术哪家强 发表于 2020-9-7 08:42
] 一起打卡学习
OK,加油
页:
[1]