汉诺塔又称河内塔问题是源于印度一个古老传说的益智玩具,创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,把圆盘从下面开始按大小顺序重新摆放在另一根柱子上,并且规定在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

对ABC三柱第一步是把前n-1个从A移到B,最后一次是把n移到C,第二步是把n-1个从B移到C,最后一次是把第1个移到C也就是终结条件

A->C

A->B

C->B

A->C

B->A

B->C

A->C

 想完成最后一步就得完成前n-1,完成n-1的条件是完成n-2......一个函数反复调用,用自己解决自己,代码如下

void hanoi(int paraN,char paraSource,char paraDestination,char paraTransit){
	if(paraN <= 0){
		return;
	}else{
		hanoi(paraN - 1,paraSource,paraTransit,paraDestination);
		printf("%c->%c\r\n",paraSource,paraDestination);
		hanoi(paraN - 1,paraTransit,paraDestination,paraSource);
	}
} 

测试结果

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐