2021-03-28

【C语言】递归-汉尼塔问题

问题描述:

有三个柱子A、B、C,A柱子上有按从上到下的顺序从小到大叠在一起的n个圆盘,要把这些圆盘移动到c柱上去,要求每次只能移动一个圆盘,而且在移动的过程中盘子的顺序不能发生改变。

思路:把问题分解成三个小问题:

1.把A柱上的n-1个圆盘移动到B柱上;
2.把A柱上剩下来的一个圆盘移动到C柱上;
3.吧B柱上的n-1个圆盘移动到C柱上。

代码:
#include<stdio.h>
void Move(char source,char target);
void Hanoi(int n,char source,char help,char target);
int main(){
    Hanoi(3,'A','B','C');
    return 0;
}
void Move(char source,char target){
    printf("%c->%c\n",source,target);
}
void Hanoi(int n,char source,char help,char target){
    if(n==1) Move(source,target);
    else{
        Hanoi(n-1,source,target,help);
        Move(source,target);
        Hanoi(n-1,help,source,target);
    }
}

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值