汉诺塔问题

来源:互联网 发布:sql select order by 编辑:程序博客网 时间:2024/06/05 13:24
/* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:cpp1.cpp * 作者:巩凯强 * 完成日期:2015年9月10日 * 版本号:v6.0 * * 问题描述:经典汉诺塔,A.B.C三个柱子,借助于B,将A上边的盘子,依次加到C柱子上。* 输入描述:n为盘子数,即为将m个盘子在A,B,C三个柱子上变换。* 程序输出:变换的过程*/ #include <stdio.h>   void move(int, char, char,char);  int main()  {int discCount;scanf("%d",&discCount);    move(discCount,'A','B','C');      return 0;  }  void move(int n, char A, char B,char C)  {      if(n==1)          printf("%c-->%c\n", A, C); //递归的终止条件     else      {          move(n-1,A,C,B);          printf("%c-->%c\n", A, C);         move(n-1,B,A,C);     }  }  


运行结果:

以3个盘子为例。

知识点总结:

以三个盘子为例,运用递归算法,首先将A柱上的第一个盘子移到C盘上,第二个盘子移到B柱上,再把C柱上的盘子移到B柱上,再把A柱上的第三个盘子移到C住上,此时B柱上有两个盘子,先把第一个盘子移到A柱上,再把第二个盘子移到C柱上,最后把A柱上的盘子移到C盘上。在这主要是灵活运用递归算法。

学习心得:

通过这个题目,巩固了递归算法的运用,

0 0
原创粉丝点击