九连环 ← 递归

【算法分析】
九连环游戏的历史非常悠久,据说起源于战国时期。
九连环由九个相互连接的环组成,这九个环套在一个中空的长形柄中。
九连环的玩法是要将这九个环从柄上解下来。解下所有九个环需要解341步,因此人们需要有耐心。


 

 九连环的游戏规则:
(1)第 1 环可以自由上下;
(2)而上/下第 n 环时(n>1),则必须满足:(a)第 n-1 个环在架上;(b)前 n-2 个环全部在架下。




【算法代码】
对于给定的n,拆解完n连环的步数如下表所示:

n 1 2 3 4 5 6 7 8 9 10 11
步数 1 2 5 10 21 42 85 170 341 682 1365

本代码可用于解决n连环问题。

#include <bits/stdc++.h>
using namespace std;

int step;
void UpRing(int n);
void DownRing(int n);

void UpRing(int n){ //上环函数
	if(n>1) UpRing(n-1);
	if(n>2) DownRing(n-2);
	printf("%d:上第%d个环\n",++step,n);
	if(n>2) UpRing(n-2);
}

void DownRing(int n){ //下环函数
	if(n>2) DownRing(n-2);
	printf("%d:下第%d个环\n",++step,n);
	if(n>2) UpRing(n-2);
	if(n>1) DownRing(n-1);
}

int main(){
	int n;
	scanf("%d",&n);
	
	printf("安装%d连环的步骤\n",n);
	step=0;
	UpRing(n);
	
	printf("拆解%d连环的步骤\n",n);
	step=0; 
	DownRing(n);	
	
	printf("结束\n");
	
	return 0;
}


/*
in:
3

out:
安装3连环的步骤
1:上第1个环
2:上第2个环
3:下第1个环
4:上第3个环
5:上第1个环
拆解3连环的步骤
1:下第1个环
2:下第3个环
3:上第1个环
4:下第2个环
5:下第1个环
结束
*/



【参考文献】
https://blog.csdn.net/weixin_43418664/article/details/83904826
https://blog.csdn.net/laoyang360/article/details/7857911
https://zhuanlan.zhihu.com/p/79226500
https://www.sohu.com/a/150145539_372450
https://haokan.baidu.com/v?pd=wisenatural&vid=13884581494855320361
https://blog.csdn.net/Catherinezxc/article/details/111938266

Guess you like

Origin blog.csdn.net/hnjzsyjyj/article/details/120463039