eg 6-6 Hanoi problem

/*
    Hanoi(汉诺塔)问题,这是一个典型的只有哟个递归方法(不能用
    其他方法解决的问题。问题是这样的:有三个塔座A,B,C.A 塔座上
    有n个大小不等的圆盘,大的在下,小的在上,要把这n个圆盘从A
    移到C上,每次只能移动一个圆盘,移动可以借助B进行,但在任何
    时候,任何塔座上的圆盘都必须保持大盘在下,小盘在上,要求编
    程打印出移动的步骤
    算法的三个步骤可以分成两类操作:
    (1)将n-1个圆盘从一个塔座移到另外一个塔座上(n>1),
    (2)将一个圆盘从一个塔座移到另外一个塔座上
    设计一个函数来实现以上两个操作,函数hanoi(n,x,y,z);
    表示将n个圆盘从x塔座移到z塔座,借助y塔座。
*/

#include <stdio.h>

void hanoi(int n,int x,int y,int z)    //将n个圆盘从X塔座移到z塔座,借助y塔座
{
    if(n==1)
        printf("%c-->%c\n",x,z);       //如果x上只有一个圆盘,那么直接从x移到z
    else  
    {
        hanoi(n-1,x,z,y) 
        printf("%c-->%c\n",x,z);
        hanoi(n-1,y,x,z); 
    }
        
    
}
int main()
{
    int n;
    printf("请输入圆盘数:\n");
    scanf("%d",&n);
    printf("从A塔座移动%d个圆盘到C塔座借助B塔座的步骤如下:\n",x,z);
    hanoi(n,'A','B','C');                //调用hanoi函数打印移动的步骤
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值