汉诺塔

喜夏-厌秋 提交于 2019-12-30 03:46:38

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

递归法

/*程序名 汉诺塔 递归方法实现

有三个木桩 p1,p2,p3 ,把在p1上的n个盘子移动到p3上,一次只能移动一个盘子,
并且此过程中每个木桩上的盘子都是按小到大排列。

*/

#include <stdio.h>

void hanoi(int n, int from, int to, int tmp);

int main() {

	int n = 3;//盘子数量
	int p1 = 1;
	int p2 = 2;
	int p3 = 3;//p1 p2 p3 模拟三个木桩

	hanoi(n, p1, p3, p2);

}

void hanoi(int n,int from ,int to ,int tmp) {

	if (n == 1) {
		printf("%d:%d->%d\n", n, from, to);
		return;
	}
	
	//先从p1挪动n-1个盘子到p2
	hanoi(n - 1, from, tmp, to);
	//再挪动第n个盘子从p1到p3
	printf("%d: %d->%d\n", n, from, to);
	//最后挪动n-1个盘子从p2到p3
	hanoi(n - 1, tmp, to, from);

}

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!