C语言实现Hanoi(汉诺塔)问题的递归求解
2018-01-30 10:58
751 查看
汉诺塔问题是一个解决方法满足递归结构的典型问题,通过这个例子的学习,可以很好地理解递归的概念。而且利用高中所学的数列知识,可以求出对应n个圆盘数目,需要移动的步数,可以发现当n=64时,移动步数已经是比天文数字还天文数字的天文数字。
#include<stdio.h>
//Hanoi问题的递归求解
void main()
{
void towerOfHanoi(int n,char from,char to,char aux);
int a;//圆盘的个数
("请输入圆盘的数目");
scanf("%d",&a);
towerOfHanoi(a,'A','C','B');//A,B,C分别代表3个柱子
}
void towerOfHanoi(int n,char from,char to,char aux)
{
if(n==1)
{
printf("1 from %c to %c\n",from,to);
return;
}//只有一个圆盘直接从第一个柱子移到第三个柱子
towerOfHanoi(n-1,from,aux,to);//圆盘数目大于1时用第三个柱子过渡,把第一个柱子的n-1个圆盘放到第二个上面
printf("%d from %c to %c\n",n,from,to);//将第一个柱子上最下面的圆盘放到第三个柱子
towerOfHanoi(n-1,aux,to,from);//将已经放到第二个柱子上的n-1个圆盘,通过第一个柱子做过渡,放到第三个柱子上面
}
#include<stdio.h>
//Hanoi问题的递归求解
void main()
{
void towerOfHanoi(int n,char from,char to,char aux);
int a;//圆盘的个数
("请输入圆盘的数目");
scanf("%d",&a);
towerOfHanoi(a,'A','C','B');//A,B,C分别代表3个柱子
}
void towerOfHanoi(int n,char from,char to,char aux)
{
if(n==1)
{
printf("1 from %c to %c\n",from,to);
return;
}//只有一个圆盘直接从第一个柱子移到第三个柱子
towerOfHanoi(n-1,from,aux,to);//圆盘数目大于1时用第三个柱子过渡,把第一个柱子的n-1个圆盘放到第二个上面
printf("%d from %c to %c\n",n,from,to);//将第一个柱子上最下面的圆盘放到第三个柱子
towerOfHanoi(n-1,aux,to,from);//将已经放到第二个柱子上的n-1个圆盘,通过第一个柱子做过渡,放到第三个柱子上面
}
相关文章推荐
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 实现汉诺塔(Hanoi)问题(堆栈、递归)
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 用C语言解决(hanoi)汉诺塔问题——函数的递归调用
- 数据结构的应用——使用栈和递归实现Hanoi问题求解
- 黑马程序员--汉诺塔问题的递归求解C语言
- 汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归
- 【经典问题】汉诺塔(递归、C语言实现)
- 学习C/C++语言:递归求解hanoi汉诺塔问题
- <C语言>递归思维及其实现-----汉诺塔问题
- hanoi汉诺塔问题的递归实现
- C语言 N阶汉诺塔问题的递归实现
- 递归求解N皇后问题(c语言)
- 用递归方法求解汉诺塔问题
- Hanoi塔问题 栈与递归C语言编程实现
- C语言中的Hanoi(汉诺塔)问题
- 汉诺塔问题的递归实现(扩展)
- 汉诺塔 Hanoi 递归实现
- 汉诺塔问题的C语言实现
- 数据结构学习之递归求解汉诺塔问题