C语言递归递归算法之汉罗塔问题的实现

汉罗塔问题的递归实现(C语言版本)

    在这个问题中,我们需要将由大到小堆叠的汉罗盘从柱子A借助柱子B转移至柱子C上。在这个过程中,我们需要严格执行“小盘置于大盘之上”这个规则。

在这里插入图片描述

// 汉罗塔.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"conio.h"
void Move(char a, char b)//函数的功能是将柱子a最顶端的汉罗盘移至柱子b.
{
	printf("%c->%c\n", a, b);//利用printf()函数可以将这个过程具象化.
}
void Hanoi(int n, char a, char b, char c)//这里所写的汉罗塔函数事实上完成了这样一件事:a柱子上有n个汉罗盘,我们需要将这n个盘子借助柱子b移至柱子c,且需要严格执行“小盘置于大盘之上”这个规则.
{
	if (n == 1)//当柱子a上仅有一个盘子时,我们直接将这个盘子从柱子a移至柱子c.
		Move(a, c);
	else
	{
		Hanoi(n - 1, a, c, b);//递归调用该函数,将a柱子自上而下的前n-1个盘子,通过从柱子c移至柱子b.
		Move(a,c);//此时a柱子上仅剩最大的一个盘子,因此我们直接将其移至柱子c.
		Hanoi(n - 1, b, a, c);//再将柱子b上的n-1个盘子由柱子a转移至柱子c,至此整个过程就结束了.
	}
}
int main()
{
	char a='A', b='B',c='C';
	Hanoi(8, a, b, c);
	_getch();
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值