版权声明:本文为博主原创文章,未经博主允许不得转载。
在解决问题的过程中,整体思想还是非常重要的;举个例子,若有n个盘子,它的移动步骤是这样的:先将(n-1)个盘子借助第三根柱子移动到第二根柱子上,然后我们将最下面那个最大的盘子直接移动到第三根柱子上,最后我们借助第一根柱子将第二根柱子上的(n-1)个盘子移动到第三根柱子上!
- /*
- * Copyright (c++) 2017, 烟台大学计算机学院
- *All rights reserved,
- * 文件名: main.cpp
- * 作 者:李浩南
- *完成日期:2017年 9月 14日;
- * 第三周 :汉诺塔问题
- */
- #include <stdio.h>
- #define discCount 20
- long move(int, char, char,char);
- int main()
- {
- long count;
- count=move(discCount,'A','B','C');
- printf("%d个盘子需要移动%ld次\n", discCount, count);
- return 0;
- }
- long move(int n, char A, char B,char C)
- {
- long c1,c2;
- if(n==1)
- return 1;
- else
- {
- c1=move(n-1,A,C,B);
- c2=move(n-1,B,A,C);
- return c1+c2+1;
- }
- }
- 结果图
- 盘子数为4
-
- 盘子数为8
-
- 盘子数为16
-
- 盘子数为64
-
- 知识点总结:64个盘子加载不出来。
- 学习心得:时间复杂度对于设计算法来说十分重要。