九连环的递归算法,九连环算法(第2版)
2006-02-28 19:57
246 查看
九连环简介
九连环游戏是中国人自己发明的,它的历史非常悠久,据说起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。
九连环规律
第 1 环可以自由上下
而上/下第 n 环时(n>1),则必须满足:第 n-1 个环在架上;前 n-2 个环全部在架下
拆解/安装的过程
正确的拆解是先以第 9 环为目标,先拆下它,简化为拆一个 8 连环。接着再也第 8 环为目标,拆下它,简化为拆一个 7 连环。以此类推,直至全部拆解。
正确是安装也是以第 9 环为目标,先装上它,简化为装一个 8 连环。接着再也第 8 环为目标,装上它,简化为装一个 7 连环。以此类推,直至全部安装。
递归算法
本算法逻辑适用任意个数的连环问题,于2002年11月6日设计,2006年2月28日修改如下
#include<iostream>
using namespace std;
class Ring
{
public:
Ring(int Num):RingNum(Num){}
void StartDown();
void StartUp();
private:
int RingNum;
void DownRing(int n);
void UpRing(int n);
};
void Ring::DownRing(int n)
{
if(n>2) DownRing(n-2);
cout<<"下第"<<n<<"环";
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void Ring::UpRing(int n)
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
cout<<"上第"<<n<<"环";
if(n>2) UpRing(n-2);
}
void Ring::StartDown()
{
DownRing(RingNum);
}
void Ring::StartUp()
{
UpRing(RingNum);
}
int main()
{
Ring RingN(9);
RingN.StartDown();
RingN.StartUp();
return 0;
}
2002年九连环算法第1版:中国传统智力游戏--九连环的递归算法(九连环算法第1版)
2006年九连环算法第2版:九连环的递归算法(九连环算法第2版)
2016年九连环算法第3版:九连环算法(第3版)
九连环游戏是中国人自己发明的,它的历史非常悠久,据说起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。
九连环规律
第 1 环可以自由上下
而上/下第 n 环时(n>1),则必须满足:第 n-1 个环在架上;前 n-2 个环全部在架下
拆解/安装的过程
正确的拆解是先以第 9 环为目标,先拆下它,简化为拆一个 8 连环。接着再也第 8 环为目标,拆下它,简化为拆一个 7 连环。以此类推,直至全部拆解。
正确是安装也是以第 9 环为目标,先装上它,简化为装一个 8 连环。接着再也第 8 环为目标,装上它,简化为装一个 7 连环。以此类推,直至全部安装。
递归算法
本算法逻辑适用任意个数的连环问题,于2002年11月6日设计,2006年2月28日修改如下
#include<iostream>
using namespace std;
class Ring
{
public:
Ring(int Num):RingNum(Num){}
void StartDown();
void StartUp();
private:
int RingNum;
void DownRing(int n);
void UpRing(int n);
};
void Ring::DownRing(int n)
{
if(n>2) DownRing(n-2);
cout<<"下第"<<n<<"环";
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void Ring::UpRing(int n)
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
cout<<"上第"<<n<<"环";
if(n>2) UpRing(n-2);
}
void Ring::StartDown()
{
DownRing(RingNum);
}
void Ring::StartUp()
{
UpRing(RingNum);
}
int main()
{
Ring RingN(9);
RingN.StartDown();
RingN.StartUp();
return 0;
}
2002年九连环算法第1版:中国传统智力游戏--九连环的递归算法(九连环算法第1版)
2006年九连环算法第2版:九连环的递归算法(九连环算法第2版)
2016年九连环算法第3版:九连环算法(第3版)
相关文章推荐
- 中国传统智力游戏--九连环的递归算法,九连环算法(第1版)
- 九连环的递归算法(C和C++)
- 九连环的递归算法(C和C++)经验分析
- 数据结构-递归算法-时间复杂度
- 第十周项目2——二叉树的便利的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第10周项目2- 二叉树遍历的递归算法
- 第10周项目2-二叉树遍历的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第十周项目二(二叉树遍历的递归算法)
- ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门
- 第十周 项目2 二叉树遍历的递归算法
- 软件测试(第2版)_Paul学习03_01——Ch2举例_02
- 软件测试(第2版)_Paul学习05_01——Ch5边界值测试_01
- 第十周项目二 二叉树遍历的递归算法
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
- ROS机器人程序设计(原书第2版)补充资料 (伍) 第五章 计算机视觉
- ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation
- 原创:全排列非递归算法:微软给出的算法
- 递归算法-求最大公约数-java实现