汉若塔问题算法程序
这是一个经典的问题,递归程序实现,子程序中两次调用自己。
也是递归调用程序中的范例。
递归程序的关键在于递归调用和结束条件,通常十分简洁明了。
程序中,使用条件编译来统计子程序调用次数。
-
/*
-
*
-
* 汉诺塔问题算法程序
-
*
-
*/
-
#include <stdio.h>
-
//#define DEBUG
-
#ifdef DEBUG
-
int c1=0;
-
#endif
-
void hanoi(int, char, char, char);
-
void move(int, char, char);
-
int main(void)
-
{
-
int i;
-
for(i=1; i<=4; i++)
-
{
-
printf("\nlevel=%d:\n", i);
-
#ifdef DEBUG
-
c1 = 0;
-
#endif
-
hanoi(i, 'A', 'B', 'C');
-
#ifdef DEBUG
-
printf("c1=%d\n", c1);
-
#endif
-
}
-
return 0;
-
}
-
void hanoi(int n, char from, char to, char temp)
-
{
-
#ifdef DEBUG
-
c1++;
-
#endif
-
if(n == 1)
-
{
-
move(n, from, to);
-
}
-
else
-
{
-
hanoi(n-1, from, temp, to);
-
move(n, from, to);
-
hanoi(n-1, temp, to, from);
-
}
-
}
-
void move(int n, char from, char to)
-
{
-
printf("%d: %c->%c\n",n, from, to);
-
}