汉罗塔问题的递归实现(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;
}