递归思想解决汉诺塔的问题

【解决思路】

 3个塔柱为例 

 

 铁柱铁柱铁柱z 总共64个盘子

 

 我们把所有的呃思路聚集为以下两个问题:

 问题1: X上的63个盘子借助z移动到y

 问题2: Y上的63个盘子接住X移动到Z

 

 然后用这个方法递归—————-

 

 问题1的圆盘移动步骤为

 –先将前62个盘子移动到z上,确保大盘在小盘下。

 –再将最底下的第63歌盘子移动到y上。

 –最后将z上的62个盘子移动到Y

 问题2的圆盘的移动步骤为:

 –先将前62个盘子移动到z上,确保大盘在小盘下。

 –再将最底下的第63歌盘子移动到y上。

 –最后将z上的62个盘子移动到Y

————————————————————————————————————————————————————————————————————

【代码-C语言】

#include <stdio.h>


//参数:n移动动的个数 xyz分别代表三个铁柱

void moveDish(int n,char x,char y,char z){

    
    if(1==n){
        printf("%c---->%c\n",x,z);
    }else{
    
        moveDish(n-1, x, z, y);  //将n-1个盘子借助z从x移动到y上
        printf("%c---->%c\n",x,z); //将第n个盘子移动到z上
        moveDish(n-1, y, x, z);  //将n-1个盘子借助x从y移动到z上

    }
}

int main(){

    int n ;
    printf("请输入汉诺塔的层数");
    scanf("%d",&n);
    moveDish(n, 'X', 'Y', 'Z');
    
    return 0;
}
    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/huanghuanghonghong/article/details/52819816
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞