用递归解决汉诺塔问题

1.题目

在这里插入图片描述

2. 分析并解决

在这里插入图片描述

3. 算法分析

if(n>1)
{
先把A柱子上的前n-1个盘子从A借助C移到B
在把A柱子上的第n个盘子直接移到C
再把B柱子上的n-1个盘子在借助A移到C

}

4. 代码实现


/*
 if(n>1)
 {
        先把A柱子上的前n-1个盘子从A借助C移到B
        在把A柱子上的第n个盘子直接移到C
        再把B柱子上的n-1个盘子在借助A移到C

 }
 */

#include<stdio.h>

void hannuota(int n,char A,char B,char C)
{
    
    
    /*
     如果是一个盘子
            直接将A柱子上的盘子从A移到C
     否则
            先把A柱子上的前n-1个盘子从A借助C移到B
            直接将A柱子上的第n个盘子从A移到C
            再把B柱子上的n-1个盘子在借助A移到C

    */
    if(n == 1)
    {
    
    
        printf("将编号为%d的盘子直接从%c移到%c\n",n,A,C);
    }
    else
    {
    
    
        hannuota(n-1,A,C,B);
        printf("将编号为%d的盘子直接从%c移到%c\n",n,A,C);
        hannuota(n-1,B,A,C);
    }

}


int main(){
    
    
    char ch1='A';
    char ch2='B';
    char ch3='C';
    int n;
    printf("请输入要移动的盘子个数:");
    scanf("%d",&n);
    hannuota(n,'A','B','C');

}

猜你喜欢

转载自blog.csdn.net/qq_55671900/article/details/129251465