九连环的递回算法(C战C++)
来源:互联网 发布:淘宝现在还有辅助卖吗 编辑:程序博客网 时间:2024/06/10 02:10
九连环的递回算法(C战c++)
九连环的递回算法
1、九连环简介
九连周游戏是止您妊旁己创造的,它的汗青十分悠暂,听说是来源于战国期间。九连环次要是由一个框架战九个悦挥蟹组成:每一个悦挥蟹上连有一个曲杆,而那个曲杆则正在前面一个悦挥蟹内脱过,九个曲杆的另外一端用一块木板或悦挥行肃对固定。
2、九连环的纪律
经由过程玩九连环您便会发明存正在如许一个纪律:
(1)第 1环能够自在上下
(2)而上/下第 n环时(n>1),则必需谦足:
(a)第 n-1个环正在架上
(b)前 n-2个环局部正在架下
3、拆解/装置的过程
正确的拆解是先以第 9环为目的,先拆下它,简化为拆一个 8连环。接着再也第 8 环为目的,拆下它,简化为拆一个 7连环。以此类推,曲至局部拆解。
其实装置战拆解是一个原理,由于他们均是利用上里说的纪律去完秤弈。
正确是装置也是先以第 9环为目的,先拆上它,简化为拆一个 8连环。接着再也第 8 环为目的,拆上它,简化为拆一个 7连环。以此类推,曲至局部装置。
当然,如今那么说是便于理解,当您深入的理解两粝里所说的纪律后,便会发明,装置上第 9环后,问题能够被简化为拆一个 7连唤爆而当拆上第 7 环后,问题便被简化为拆一个 5连环了,呵呵,便是如许的,没有知讲您如今能否大白我的意义……
4、一个猜念
认真察看九连环的构造、考虑九连环的纪律及拆解/装置的过程,您是否是有一种觉得:九连环跟递回必然有联络。您看,递回的根本思惟是把一个年夜的问题合成为一个规模矫Α的问题,从那些矫Α问题的解,机关出年夜问题的解,而那些规模矫Α的问题,用一样的办法合成成更小的问题,从更小问题的解,机关出矫Α的问题,一层层下来,普通最初老是能够合成到能够间接供解的小问题。嘿嘿,九连环的拆解/装置何等的契合那个纪律啊……^_^
5、算法完成
以下是算法完成,法式写的很简约,省略了许多功用的完成,好比计数等,假如您觉得有须要的话,能够自止加减上来,我相疑很容易,其实不要许多的改动。
The C Code Here:
/****************************/
任意 N连环均合用
日期:2002/11/6
法式设计@岳坑蘩
腾讯QQ:3908000
电邮:Havelife@mail.csdn.net
/****************************/
void UpRing(int n); /*函数声明*/
void DownRing(int n) /*下环逻辑*/
{
if(n>2) DownRing(n-2);
printf("下第%d环\n",n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void UpRing(int n) /*上环逻辑*/
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("上第%d环\n",n);
if(n>2) UpRing(n-2);
}
void main()
{
printf("拆解\n");
DownRing(9);
printf("装置\n");
UpRing(9);
printf("完毕\n");
}
The C++ Code Here:
/****************************/
转载注明盛世游戏:http://www.shengshiyouxi.com
/****************************/
#include<iostream>
using namespace std;
class Ring
{
public:
Ring(int n):nRingNum(n){}
void UpRing(int n);
void DownRing(int n);
void startDownRing();
void startUpRing();
void totalCnt();
void setUpZero();
private:
int nRingNum;
static int s_nCnt;
};
int Ring::s_nCnt = 0; //计数
void Ring::UpRing(int n) //Upring是DownRing的顺过程.
{
++s_nCnt;
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
cout << "上第" << n << "环" << endl;
if(n>2) UpRing(n-2);
}
void Ring::DownRing(int n)
{
++s_nCnt;
if(n>2) DownRing(n-2);
cout <<"下第" << n << "环" << endl;
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void Ring::startDownRing()
{
cout << "拆解" << nRingNum << "连环操做!" << endl;
DownRing(nRingNum);
cout << "拆解终了" << endl;
}
void Ring::startUpRing()
{
cout << "装置" << nRingNum << "连环操做!" << endl;
UpRing(nRingNum);
cout << "装置终了" << endl;
}
void Ring::totalCnt()
{
cout << "共乏计擅堍下环" << s_nCnt << "次!" << endl << endl;
}
void Ring::setUpZero()
{
Ring::s_nCnt = 0;
}
int main()
{
Ring ring(3);
ring.startDownRing();
ring.totalCnt();
ring.setUpZero(); //置为0
ring.startUpRing();
ring.totalCnt();
ring.setUpZero();
return 0;
}
九连环的递回算法
1、九连环简介
九连周游戏是止您妊旁己创造的,它的汗青十分悠暂,听说是来源于战国期间。九连环次要是由一个框架战九个悦挥蟹组成:每一个悦挥蟹上连有一个曲杆,而那个曲杆则正在前面一个悦挥蟹内脱过,九个曲杆的另外一端用一块木板或悦挥行肃对固定。
2、九连环的纪律
经由过程玩九连环您便会发明存正在如许一个纪律:
(1)第 1环能够自在上下
(2)而上/下第 n环时(n>1),则必需谦足:
(a)第 n-1个环正在架上
(b)前 n-2个环局部正在架下
3、拆解/装置的过程
正确的拆解是先以第 9环为目的,先拆下它,简化为拆一个 8连环。接着再也第 8 环为目的,拆下它,简化为拆一个 7连环。以此类推,曲至局部拆解。
其实装置战拆解是一个原理,由于他们均是利用上里说的纪律去完秤弈。
正确是装置也是先以第 9环为目的,先拆上它,简化为拆一个 8连环。接着再也第 8 环为目的,拆上它,简化为拆一个 7连环。以此类推,曲至局部装置。
当然,如今那么说是便于理解,当您深入的理解两粝里所说的纪律后,便会发明,装置上第 9环后,问题能够被简化为拆一个 7连唤爆而当拆上第 7 环后,问题便被简化为拆一个 5连环了,呵呵,便是如许的,没有知讲您如今能否大白我的意义……
4、一个猜念
认真察看九连环的构造、考虑九连环的纪律及拆解/装置的过程,您是否是有一种觉得:九连环跟递回必然有联络。您看,递回的根本思惟是把一个年夜的问题合成为一个规模矫Α的问题,从那些矫Α问题的解,机关出年夜问题的解,而那些规模矫Α的问题,用一样的办法合成成更小的问题,从更小问题的解,机关出矫Α的问题,一层层下来,普通最初老是能够合成到能够间接供解的小问题。嘿嘿,九连环的拆解/装置何等的契合那个纪律啊……^_^
5、算法完成
以下是算法完成,法式写的很简约,省略了许多功用的完成,好比计数等,假如您觉得有须要的话,能够自止加减上来,我相疑很容易,其实不要许多的改动。
The C Code Here:
/****************************/
任意 N连环均合用
日期:2002/11/6
法式设计@岳坑蘩
腾讯QQ:3908000
电邮:Havelife@mail.csdn.net
/****************************/
void UpRing(int n); /*函数声明*/
void DownRing(int n) /*下环逻辑*/
{
if(n>2) DownRing(n-2);
printf("下第%d环\n",n);
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void UpRing(int n) /*上环逻辑*/
{
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
printf("上第%d环\n",n);
if(n>2) UpRing(n-2);
}
void main()
{
printf("拆解\n");
DownRing(9);
printf("装置\n");
UpRing(9);
printf("完毕\n");
}
The C++ Code Here:
/****************************/
转载注明盛世游戏:http://www.shengshiyouxi.com
/****************************/
#include<iostream>
using namespace std;
class Ring
{
public:
Ring(int n):nRingNum(n){}
void UpRing(int n);
void DownRing(int n);
void startDownRing();
void startUpRing();
void totalCnt();
void setUpZero();
private:
int nRingNum;
static int s_nCnt;
};
int Ring::s_nCnt = 0; //计数
void Ring::UpRing(int n) //Upring是DownRing的顺过程.
{
++s_nCnt;
if(n>1) UpRing(n-1);
if(n>2) DownRing(n-2);
cout << "上第" << n << "环" << endl;
if(n>2) UpRing(n-2);
}
void Ring::DownRing(int n)
{
++s_nCnt;
if(n>2) DownRing(n-2);
cout <<"下第" << n << "环" << endl;
if(n>2) UpRing(n-2);
if(n>1) DownRing(n-1);
}
void Ring::startDownRing()
{
cout << "拆解" << nRingNum << "连环操做!" << endl;
DownRing(nRingNum);
cout << "拆解终了" << endl;
}
void Ring::startUpRing()
{
cout << "装置" << nRingNum << "连环操做!" << endl;
UpRing(nRingNum);
cout << "装置终了" << endl;
}
void Ring::totalCnt()
{
cout << "共乏计擅堍下环" << s_nCnt << "次!" << endl << endl;
}
void Ring::setUpZero()
{
Ring::s_nCnt = 0;
}
int main()
{
Ring ring(3);
ring.startDownRing();
ring.totalCnt();
ring.setUpZero(); //置为0
ring.startUpRing();
ring.totalCnt();
ring.setUpZero();
return 0;
}
- 九连环的递回算法(C战C++)
- 九连环的递归算法(C和C++)
- 九连环的递归算法(C和C++)经验分析
- 二叉树的遍历算法(递回与非递回)
- [C++] 老鼠走迷宫(使用递回)
- 中国传统智力游戏--九连环的递归算法,九连环算法(第1版)
- 九连环的递归算法,九连环算法(第2版)
- 九连环 C语言递归代码
- 连环锁 POJ - 1832(九连环的推广)
- 九连环的解法(收集)
- 九连环的解法
- c++n连环
- 九连环游戏算法递归实现
- 九连环
- 九连环问题解决
- 关于九连环
- 九连环问题解决
- 九连环玩法
- hello, world!
- ps命令
- Android init进程中鲜为人知的charger mode 模式
- c#给自己写的程序集设置图标、版本设置、添加其他工程中资源文件示例图
- Linux串口设置参数
- 九连环的递回算法(C战C++)
- 5、CentOS安全设置
- flex4事件监听与自定义事件分发(二)
- iOS - plist文件写入问题:
- js 函数调用顺序研究
- 7、Linux安装JDK1.6.x
- 如何开启nginx 的https服务
- Python日期操作
- Mybatis学习笔记