对汉诺塔问题的个人理解

1.汉诺塔问题概述

    问题简化描述为:n个盘子和3根柱子:A(源)、B(备用)、C(目的),盘子的大小不同且中间有一孔,可以将盘子“串”在柱子上,每个盘子只能放在比它大的盘子上面。起初,所有盘子在A柱上,问题是将盘子一个一个地从A柱子移动到C柱子。移动过程中,可以使用B柱,但盘子也只能放在比它大的盘子上面。

汉诺塔问题的以下几个限制条件:

1.在小圆盘上不能放大圆盘。

2.在三根柱子之间一回只能移动一个圆盘。

3.只能移动在最顶端的圆盘。


2.算法分析

  先从比较小的数算起:

  当n=1时;移动步骤为,从A>>>C;

  当n=2时;移动步骤为,从A>>>B,A>>>C,B>>C;(我认为的核心点)

当N>=3时;可以这样理解;

  把N个圆盘一分为二,其中第1到第N-1个为一个整体,剩下的第N个圆盘自己为一整体;现在移动方式就是当N=2的步骤;那么对移动步骤新的理解为;

   第一步:A>>>B:把从1到N-1的圆盘从A柱移动到B柱;(具体先步骤忽略不计)

   第二步:A>>>C:把最大的圆盘,也是第N个圆盘从A柱移动到C柱。

  第三步:B>>>C:把从1到N-1的圆盘从B柱移到C柱:(具体步骤先忽略不计)

  从以上分析可知,我们只需要求第一与第三步就可以了;同样的原理,递归思想;

   以N=4(只画了第一步)为例:


g

3.代码实现

    去网上搜一下吧;这里不在赘述。

你可能感兴趣的:(对汉诺塔问题的个人理解)