数据结构与算法基础之汉诺塔---手写出栈压栈过程实现

て烟熏妆下的殇ゞ 提交于 2019-11-27 12:50:39

        具体的代码请看我上一篇文章!

递归执行过程(调用方法的栈机制:不停的压栈、出栈(特点:先进后出)):

  假如输入的盘子个数为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

 

程序执行完毕

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!