汉诺斯塔问题递归解法

汉诺斯塔问题递归解法主要是把2个盘子的移动推到了n个盘子的移动。n个盘子就相当于将下面最大的盘子和上面的n-1个盘子当作两个盘子来处理,然后将n-1个盘子继续分解为第n-1个盘子和其上面的n-2个盘子的移动过程。以此类推,直至最上面的两个盘子的移动。这就有递归的思想在里面,从而我们可以通过程序来实现它。

假设有A、B、C三根柱子,一开始在A柱上从大到小从底部到顶部一次放置盘子,现在的目标就是要把A柱上的盘子保持现有位置不变的要求放置在C柱上。
递归过程主要分为三个步骤:

  • 1.从A柱将上面的1~n-1号盘移至B柱上,C柱作为辅助柱协同运动。
  • 2.将A柱上剩余的第n号盘子移至C柱上
  • 3.再将B柱上的1~n-1号盘移至C柱上,A柱作为辅助柱协同移动。
#include<stdio.h>
void move(int n,char a,char b,char c)
{
    if(n>0)
    {
        move(n-1,a,c,b);   
        printf("%c(%d)->%c\n",a,n,c);
        move(n-1,b,a,c);
    }
}
int main()
{
    int n;
    char a='A',b='B',c='C';
    scanf("%d",&n);
    move(n,a,b,c);
    return 0;   
}

END

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/lcr_happy/article/details/45201811
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞