九连环的递归算法,九连环算法(第2版)

九连环简介

九连环游戏是中国人自己发明的,它的历史非常悠久,据说起源于战国时期。九连环主要是由一个框架和九个圆环组成:每个圆环上连有一个直杆,而这个直杆则在后面一个圆环内穿过,九个直杆的另一端用一块木板或圆环相对固定。

九连环规律

  • 第 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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

learnlife

向这个世界输出我独有的声音。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值