利用函数递归调用实现汉诺塔
2012-08-09 16:27
253 查看
/*
*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 ************************
*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 ************************
相关文章推荐
- 学习到栈的时候,利用函数递归调用解决汉诺塔
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 利用rmdir()函数实现PHP递归删除目录
- 递归、函数的调用机制及汉诺塔问题
- 2011-04-13 15:54 利用事件触发实现ActiveX调用js函数
- 3.1题目: 利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! = n*(n-1)*…*3*2*1;
- 利用函数调用实现两个数的交换
- 利用反射函数实现一键清除缓存,并获取清除的缓存数目。调用反射函数类出错java.lang.NoSuchMethodException: getPackageSizeInfo.
- 利用ida python 实现复原函数调用的参数 (仅对数据被简单硬编码有效)
- 利用Python的内嵌函数和递归研究汉诺塔问题
- 利用递归调用实现十进制转化成任意进制
- C++学习 【4.2】 利用函数实现指定的功能---函数的调用
- 利用with关键字实现数据查询的递归调用
- JavaScript Arguments 实现可变参数的函数,以及函数的递归调用
- C语言创建一个数组,利用函数调用实现数组的初始化,逆置和清零
- 利用java反射调用实现对字符串的解析,成功调入函数,并且返回值
- Oracle之利用函数索引减少递归调用
- 利用golang的反射包,实现根据函数名自动调用函数。
- php基于闭包实现函数的自调用(递归)实例分析
- 利用游标实现递归(函数)