递归----汉诺塔问题
2017-11-15 16:38
344 查看
汉诺塔问题:
古印度有一个梵塔,塔内有三个柱子A、B、C,开始时A柱上套有n个盘子(n由键盘输入),盘子大小不等,大的在下,小的在上,现要求把这n个盘子从A柱移到C柱。规定每次只能移动一个盘,且在任何时候3个柱子上的盘子都是大的在下,小的在上。移动过程中可利用B柱。采用递归算法模拟移动盘的过程,并要输出移动盘子的每一步。
#include <iostream>
using namespace std;
int i=1;
void move(int n,char from,char to)
{
cout<<"第"<<i++<<"步:将"<<n<<"号盘子从"<<from<<"移动到"<<to<<endl;
}
void hanoi(int n,char from,char denpendon,char to)
{
if (n==1)
move(1,from,to);
else
{
hanoi(n-1,from,to,denpendon);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
move(n,from,to); //将剩下的一个盘子移动到目的塔上
hanoi(n-1,denpendon,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
}
}
void main()
{
char x='A',y='B',z='C';
cout<<"请输入盘子的个数:";
int n;
cin>>n;
cout<<"盘子移动情况如下:"<<endl;
hanoi(n,x,y,z);
古印度有一个梵塔,塔内有三个柱子A、B、C,开始时A柱上套有n个盘子(n由键盘输入),盘子大小不等,大的在下,小的在上,现要求把这n个盘子从A柱移到C柱。规定每次只能移动一个盘,且在任何时候3个柱子上的盘子都是大的在下,小的在上。移动过程中可利用B柱。采用递归算法模拟移动盘的过程,并要输出移动盘子的每一步。
#include <iostream>
using namespace std;
int i=1;
void move(int n,char from,char to)
{
cout<<"第"<<i++<<"步:将"<<n<<"号盘子从"<<from<<"移动到"<<to<<endl;
}
void hanoi(int n,char from,char denpendon,char to)
{
if (n==1)
move(1,from,to);
else
{
hanoi(n-1,from,to,denpendon);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
move(n,from,to); //将剩下的一个盘子移动到目的塔上
hanoi(n-1,denpendon,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
}
}
void main()
{
char x='A',y='B',z='C';
cout<<"请输入盘子的个数:";
int n;
cin>>n;
cout<<"盘子移动情况如下:"<<endl;
hanoi(n,x,y,z);
return 0; }
相关文章推荐
- 汉诺塔问题-递归 -mobai_dalao
- 汉诺塔问题的java递归实现
- 汉诺塔问题的递归求解
- 递归5--汉诺塔问题的栈实现
- 汉诺塔问题的递归解决方法
- 汉诺塔问题 Hanio ——递归思想
- 有关于递归函数的一些学习记录(Recursion)走楼梯,递归找出最两个数的大公约数,汉诺塔问题
- 汉诺塔问题的递归实现(扩展)
- 递归调用,汉诺塔问题
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 算法学习之递归--汉诺塔问题
- 数据结构学习之递归求解汉诺塔问题
- 汉诺塔问题---- 递归类型 之 非数值类型
- 递归和分治思想的典型应用—汉诺塔问题
- 汉诺塔问题的java递归实现
- 汉诺塔问题(递归过程解析)
- 深入理解递归以及汉诺塔问题[数据结构]
- 汉诺塔问题是使用递归解决问题的经典范例。