经典汉诺塔问题

总步数证明

经典汉诺塔有n个圆盘,我们设将所有圆盘从A塔-->C塔需要的步数为\(F_n\)
\(F_1=1\)
\(F_n = F_{n-1} +1+ F_{n-1}\)
易证\(F_n =2^n -1\)

代码实现

#include<stdio.h>
int step;
void Move(int id,char from,char to){
	printf("第%d步:将%d号盘子%c-->%c\n",++step,id,from,to);
	return ;
}
void Hanio(int n,char spos,char tpos,char epos){
	if(n==1)Move(n,spos,epos);
	else {
		Hanio(n-1,spos,epos,tpos);
		Move(n,spos,epos);
		Hanio(n-1,tpos,spos,epos);
	}
}
int main(){
	int n;
	scanf("%d",&n);
	Hanio(n,'A','B','C');
	printf("最后总的步数为%d步\n",step);
}
posted @ 2020-11-10 19:52  幽灵轩  阅读(165)  评论(0编辑  收藏  举报