具体的代码请看我上一篇文章!
递归执行过程(调用方法的栈机制:不停的压栈、出栈(特点:先进后出)):
假如输入的盘子个数为2:
主函数传参hanoit(2,’A‘,‘B','C'),压栈1。
n!=1,于是递归执行 hanoit(2-1,A,C,B),压栈2。
n==1,输出语句,压栈3,输出“将编号为1的盘子从A柱移到B柱",出栈3。
函数hanoit(2-1,A,C,B)出栈2
执行下一条输出语句,压栈2,输出”将编号为2的盘子从A柱移到C柱“,出栈2
执行递归 hanoit(2-1,B,A,C),压栈2,输出”将编号为1的盘子从B柱移到C柱“,出栈2
函数hanoit(2,’A‘,‘B','C')出栈1
程序执行完毕
假如输入的盘子个数为3:(较为麻烦,需要不断交替参数)
主函数传参hanoit(n=3,A=’A‘,B=‘B',C='C'),压栈1。此时A=A、B=B、C=C
n==3,递归执行hanoit(3-1,A,C,B),压栈2。此时A=A==A、B=C==C、C=B==B
n==2,递归执行hanoit(2-1,A,C,B),压栈3。此时A=A==A、B=C==B、C=B==C
n==1,输出语句,压栈4,输出“将编号为1的盘子从A柱移到C柱",出栈4。
函数hanoit(2-1,A,C,B)执行完毕,出栈3
执行下一条输出语句,压栈3,输出”将编号为2的盘子从A柱移到B柱“,出栈3。
执行函数hanoit(2-1,B,A,C),压栈3,此时A=B==C、B=A==A、C=C==B
n==1,输出语句,压栈4,输出“将编号为1的盘子从C柱移到B柱",出栈4
函数hanoit(2-1,B,A,C)执行完毕,出栈3
函数hanoit(3-1,A,C,B)执行完毕,出栈2
执行下一条输出语句,压栈2,输出“将编号为3的盘子从A柱移到C柱",出栈2
注意此时n==3时的各个参数顺序,往下继续执行hanoit(3-1,B,A,C),压栈2,此时A=B==B、B=A==A、C=C==C
n==2,递归执行hanoit(2-1,A,C,B),压栈3。此时A=A==B、B=C==C、C=B==A
n==1,输出语句,压栈4,输出“将编号为1的盘子从B柱移到A柱",出栈4。
函数hanoit(2-1,A,C,B)执行完毕,出栈3
执行下一条输出语句,压栈3,输出”将编号为2的盘子从B柱移到C柱“,出栈3。
往下执行hanoit(2-1,B,A,C),压栈3。此时A=B==A、B=A==B、C=C==C
n==1,输出语句,压栈4,输出“将编号为1的盘子从A柱移到C柱",出栈4
函数hanoit(2-1,B,A,C)执行完毕,出栈3
函数hanoit(3-1,B,A,C)执行完毕,出栈2
函数hanoit(n=3,A=’A‘,B=‘B',C='C')执行完毕,出栈1
程序执行完毕