python学习-之汉诺塔实现

先上代码:spa

#move1/2方便分析循环时调用方法的逻辑顺序
def
move1(n,a,b,c): print("-----------1号循环-----------") move(n,a,b,c) def move2(n,a,b,c): print("-----------2号循环-----------") move(n,a,b,c) def move(n,a,b,c): if n==1: return print("n=",n,"(","a=",a,"b=",b,"c=",c,")","***",a,"--->",c) else: move1(n-1,a,c,b) print("n=",n,"(","a=",a,"b=",b,"c=",c,")","***",a,"--->",c) move2(n-1,b,a,c) # print(n,"a1:",a,"b1:",b,"c1:",c) move(3,"A","B","C")

 

输出结果:3d

-----------1号循环-----------
-----------1号循环-----------
n= 1 ( a= A b= B c= C ) *** A ---> C
n= 2 ( a= A b= C c= B ) *** A ---> B
-----------2号循环-----------
n= 1 ( a= C b= A c= B ) *** C ---> B
n= 3 ( a= A b= B c= C ) *** A ---> C
-----------2号循环-----------
-----------1号循环-----------
n= 1 ( a= B b= C c= A ) *** B ---> A
n= 2 ( a= B b= A c= C ) *** B ---> C
-----------2号循环-----------
n= 1 ( a= A b= B c= C ) *** A ---> C


分析要点有三:
一、方法递归时,程序的执行走向
二、方法递归时,参数的传递
三、为何这样能够实现汉诺塔

下图是n=3时,递归逻辑走向以及参数变化,n值增长时,以此类推。输出顺序便是执行顺序,每【循环x】一次,输出”-----------x号循环-----------“,且方法参数发生变化

 目前不太清晰的是,为何这样能够实现汉诺塔,是由于这种参数变化正好符合汉诺塔的操做规则仍是其余缘由。code

n为偶数则先给B,奇数则先给C。blog

相关文章
相关标签/搜索