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\n", ++i, x, z); 12 }else{ 13 move(n-1, x, z, y); //将n-1个盘子从 x 借助 z 到 y 14 printf("第%d次移动 %c--->%c\n", ++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("请输入汉诺塔的层数:\n"); 23 scanf("%d",&n); 24 printf("移动的步骤如下:\n"); 25 move(n, 'X', 'Y', 'Z'); 26 printf("移动完成,总共走了%d次!\n",i); 27 return 0; 28 }
当汉诺塔层数为3时,总共走了7次:
当汉诺塔的层数为4时,总共走了15次:
********************************************
* 博客园: http://www.cnblogs.com/lihaiyan/
* 邮箱:1063385677@qq.com
* QQ: 1063385677
* Copyright ©2014 Lover雪儿
********************************************
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
* 博客园: http://www.cnblogs.com/lihaiyan/
* 邮箱:1063385677@qq.com
* QQ: 1063385677
* Copyright ©2014 Lover雪儿
********************************************
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。