美文网首页程序员
C++汉诺塔递归算法

C++汉诺塔递归算法

作者: 阿两sama | 来源:发表于2017-06-19 10:54 被阅读46次

    首先考虑问题

    要将盘子从A移动到C可以分成三步

    1.将N-1号盘子移动到中转柱B上

    2.将N号盘子移送到C上

    3.将N-1号盘子从B放到C

    完成步骤2后需要进行下面操作,现在N-1号盘子相当于N,中转柱变成了A

    1.N-1(相当于N-2)号盘子从B移动到中转柱A

    2.N号盘子移动到C

    3.将N-1号盘子移动到C

    .

    .

    .

    之后的操作也是重复这两个过程

    在以上过程中边的都是中转站,所以编写了以下代码

    void hnmove(int n,char f,char t){

    static int i=0;

    printf("第%d步:移动%d号盘子,%c——>%c\n",++i,n,f,t);

    }

    //n是当前盘子,a是需要移动的柱子,b是中转站,c是接收的柱子

    void hannuo(int n,char a,char b,char c){

    if (n==1) {

    hnmove(n, a, c);

    }else{

    hannuo(n-1, a, c, b);//移动N-1

    hnmove(n, a, c);//移动N

    hannuo(n-1, b, a, c);//移动N-2

    }

    }

    主函数调用

    int main(int argc, const char * argv[]) {

    void hannuo(int n,char a,char b,char c);

    int n=1;

    char a='A',b='B',c='C';

    printf("请输入汉诺塔层数");

    cin>>n;

    hannuo(n, a, b, c);

    }

    这个问题主要就是掌握要吧N移到目标柱,就要吧N-1先移到中转柱

    以上

    相关文章

      网友评论

        本文标题:C++汉诺塔递归算法

        本文链接:https://www.haomeiwen.com/subject/usrgqxtx.html