Hanoi塔问题在c语言中的详细解答
我看了Hanoi塔的c源代码,但是看不太明白有点绕,求高手详细的解答!
#include <stdio.h>
void hanoi(unsigned int i, char a, char b, char c)
{
if (i == 1)
{//移动一次由a直接到c
printf("%c -> %c\n", a, c);
}
else
{
hanoi(i-1, a, c, b);//a借助c把i-1个运到b
printf("%c -> %c\n", a, c);//把a直接搬到c
hanoi(i-1, b, a, c);
}
}
int main(void)
{
hanoi(3, 'A', 'B', 'C');
return 0;
}
个人感觉最难理解的部分就是红色标记的那些 然后再加上 蓝色的部分 就更加的混啦因为可能会错误的理解它们
hanoi(i-1, a, c, b); printf("%c -> %c\n", a, c); hanoi(i-1, b, a, c);当把这三句写在一起的时候 难道不会认为第一和第三句表达的是同样意思吗,这点如同看二叉树的中序遍历一般。如果这样子理解可能会增加你理解程序的难度,其实形式差不多 但是表达的意思完全的不同,只是在实现功能模块上有共同点。
其实从递归的特性不难发现红色标记的其实是处理第i层 而蓝色标记的则是进入到i的下一层第i-1层进行条件递归
[ 本帖最后由 寒风中的细雨 于 2011-6-4 18:28 编辑 ]