20150410 递归实现汉诺塔算法
2015-04-10 Lover雪儿
1 //汉诺塔 2 #include <stdio.h> 3 4 static int i = 0; 5 6 //将n个盘子从x借助y移动z 7 //n:移动的个数 x:源地址 y:中间柱子 z:目的柱子 8 void move(int n, char x, char y, char z) 9 { 10 if(1 == n){ 11 printf("第%d次移动 %c--->%c ", ++i, x, z); 12 }else{ 13 move(n-1, x, z, y); //将n-1个盘子从 x 借助 z 到 y 14 printf("第%d次移动 %c--->%c ", ++i, x, z); //将第n个盘子从 x 移动到 z 15 move(n-1, y, x, z); //将n-1个盘子从 y 借助 x 移动到 z 16 } 17 } 18 19 int main(void){ 20 int n; 21 22 printf("请输入汉诺塔的层数: "); 23 scanf("%d",&n); 24 printf("移动的步骤如下: "); 25 move(n, 'X', 'Y', 'Z'); 26 printf("移动完成,总共走了%d次! ",i); 27 return 0; 28 }
当汉诺塔层数为3时,总共走了7次:
当汉诺塔的层数为4时,总共走了15次: