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

it2025-04-09  19

汉罗塔问题的递归实现(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; }
最新回复(0)