##汉诺塔问题是学习c语言的递归时不能够绕过的一个问题,但是单看代码无法直观的了解解决问题的思路,下面是我学习时的一些思路,提供给大家作为参考。
##首先是代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Hanio_Step(int n, char A, char B, char C)
{
if (1 == n)
printf("%c->%c\n", A, C);
else
{
Hanio_Step(n-1, A, C, B);
printf("%c->%c", A, C);
Hanio_Step(n-1, B, A, C);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
Hanio_Step(n, 'A', 'B', 'C');
return 0;
}
原理就是封装1个函数Hanio(num, ‘A’, ‘B’, ‘C’)。其中num是塔数;A、B、C,3个字符为抽象成的3个柱子。如果只有1层那么输出A;否则就有2种情况,其1是将n-1个碟子从A经C到B。其2是将n-1个碟子从B经A到C
还有另外一种代码就是把交换的代码单独写出来,最后的效果其实都是一样的