【推荐】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);
}
来源:oschina
链接:https://my.oschina.net/u/568675/blog/3149698