C语言 汉诺塔程序当n=3时,执行步骤怎么做?
1个回答
展开全部
理解汉诺塔问题,可以先抛开递归这件事,就问题本身来讨论,先不要看程序。
三个柱子上,小的圆盘一定在大的上面。把A柱上的盘子n号盘子移到B柱上,分成两步,1)把n之前的移走,2)把n号盘移到B柱上,3)把n之前的盘子移回来。
先把这个问题本身搞清楚,再来讨论程序实现。
把n之前的盘子移走这个事,不是简单的一次就可以移走的,这是一个过程。
这个过程要借助C柱,
移动n-1个盘子的过程,与移动n个盘子的过程相比,除了数量少一个,目标是A到C,没有本质的不同,这也是使用递归的基础。
把解决问题的过程弄明白了,再来看程序就比较容易了。
n=3,移动3个盘子
实际上我们如果手工去做,要这样,
1# A-B
2# A-C
1# B-C
3# A-B,这时3#已经就位。
1# C-A
2# C-B
1# A-B
这是移动3个盘子,从A-B。
要移动第4个盘子,这时就可以做了 4# A-C,然后重复前面的过程,把3个盘子移动到过来。
不过刚才移动的3个盘子是A-B,现在则是B-C,但基本的过程是一样的。
具体 的程序看百科看吧。
三个柱子上,小的圆盘一定在大的上面。把A柱上的盘子n号盘子移到B柱上,分成两步,1)把n之前的移走,2)把n号盘移到B柱上,3)把n之前的盘子移回来。
先把这个问题本身搞清楚,再来讨论程序实现。
把n之前的盘子移走这个事,不是简单的一次就可以移走的,这是一个过程。
这个过程要借助C柱,
移动n-1个盘子的过程,与移动n个盘子的过程相比,除了数量少一个,目标是A到C,没有本质的不同,这也是使用递归的基础。
把解决问题的过程弄明白了,再来看程序就比较容易了。
n=3,移动3个盘子
实际上我们如果手工去做,要这样,
1# A-B
2# A-C
1# B-C
3# A-B,这时3#已经就位。
1# C-A
2# C-B
1# A-B
这是移动3个盘子,从A-B。
要移动第4个盘子,这时就可以做了 4# A-C,然后重复前面的过程,把3个盘子移动到过来。
不过刚才移动的3个盘子是A-B,现在则是B-C,但基本的过程是一样的。
具体 的程序看百科看吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询