利用函数递归调用实现汉诺塔

来源:互联网 发布:玻璃扯旗鱼淘宝 编辑:程序博客网 时间:2024/06/05 19:30

/*

*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 ************************

原创粉丝点击