数据结构hanoi-C语言(参考严老师的教材)

递归的定义:

若一个对象部分的包括它自己,或用它自己给自己定义,则称这个对象是递归的,递归也可定义为,在一个过程中直接或间接的调用自己,则这个过程也是递归的。

汉若塔问题:

提到递归问题就不得不提一个很经典的问题—-汉若塔,汉若塔的背景我就不凑字数仔细描述了(qaq),其实就是将一摞盘子按半径从小到大的顺序,借助一座辅助塔B,从A塔搬到C塔。具体情况如下图: 
这里写图片描述

C语言程序

#include <stdio.h>

typedef int _ElemType;
typedef char _ElemChar;
void move(_ElemChar x, _ElemType n, _ElemChar z)
{
    printf("正在将编号为:%d的圆盘从%c圆柱移动到%c的圆柱上\n", n, x, z);
}
void hanoi(_ElemType n, _ElemChar x, _ElemChar y, _ElemChar z)
{
    if(1 == n)
        move(x, 1, z);    //将编号为1的圆盘从x至z 
    else
    {
       hanoi(n - 1, x, z, y);//将X上的编号为1至n-1的圆盘移动到Y,Z作辅助塔
        move(x ,n,z);        //将编号为n的圆盘从X移动到Z
        hanoi(n - 1, y, x, z);//将Y上的编号为1至n-1的圆盘移动到Z,X作辅助塔
    }

int main(int argc, char *argv[])
{
    _ElemType n;
    _ElemChar X, Y, Z;
    X = 65;
    Y = 66;
    Z = 67;
    printf("请输入圆盘数:");
    scanf("%d", &n);
    printf("\n");
    hanoi(n, X, Y, Z);
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值