/*
*wuxiuwen
*利用函数递归调用实现汉诺塔
*/
#include<stdio.h>
int count; //打印的行数,同时可以看进行了多少次的操作
int hanio(int i,char from,char tmp,char to); //汉诺塔的函数,利用函数递归调用
int move(char,char); //操作
int input(void); //输入操作
int main()
{
hanio(input(),'A','B','C');
return 0;
}
int input()
{
int num=0;
printf("please input a number: \n");
scanf("%d",&num);
printf("the action is :\n");
return num;
}
int move(char from,char to)
{
count++;
printf("%d : move %c to %c\n",count,from,to);
return 0;
}
int hanio(int i,char from,char tmp,char to)
{
if(1==i)
{
move(from,to);
}
else
{
hanio(i-1,from,to,tmp);
move(from,tmp);
hanio(i-1,tmp,from,to);
}
return 0;
}
//*******************************************//
利用函数递归调用实现汉诺塔,该函数从外层进行深入函数中,进行一层层调用,然后一层层返回。
编译,执行,输入4,结果如下:
[root@localhost wuxiuwen]# ./a.out
please input a number:
4
the action is :
1 : move A to B
2 : move A to B
3 : move B to C
4 : move A to C
5 : move C to A
6 : move C to A
7 : move A to B
8 : move A to B
9 : move B to C
10 : move B to C
11 : move C to A
12 : move B to A
13 : move A to B
14 : move A to B
15 : move B to C
[root@localhost wuxiuwen]#
********************************end ************************