前言:在学习递归过程中,书中举例了hanoi塔的例子,代码很少,但我不理解其编写原理,于是逐步分析记录了每个变量的变化,并将其流程以图的形式表达出来,以供以后复习!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
程序代码(三阶为例):
#include <stdio.h>
void hanoi(int n, char A, char B, char C)//将n个圆盘从A柱移动到C柱,借助B作为辅助柱
{
if(n == 1)
{
printf("%c -> %c\n", A, C); //将圆盘从A移动到C
}
else
{
hanoi(n-1, A, C, B); //将A上编号1至n-1的圆盘移动到B,C做辅助塔
printf("%c -> %c\n", A, C); //将圆盘从A移动到C
hanoi(n-1, B, A, C); //将B上编号1至n-1的圆盘移动到C,A做辅助塔
}
}
int main(int argc, char** argv) {
hanoi(3, 'A', 'B', 'C'); //三阶hanoi塔
return 0;
}
图解分析:
其中,我认为每次对于hanoi(int n, char A, char B, char C)中A,B,C的形参实参的理解及赋值问题,是困扰我的地方。
欢迎一起探讨问题!
如有不正确的地方,请不要吝啬指正!
谢谢阅读!