项目三-体验复杂度(2)汉诺塔

来源:互联网 发布:goodbye my lover 知乎 编辑:程序博客网 时间:2024/06/04 19:13
/* 
 
 * copyright (c) 2016,烟台大学计算机学院 
 
 * All rights reserved. 
 
 * 文件名称:1.cpp 
 
 * 作者:杨俊杰
 * 完成日期:2016年9月22日 
 
 * 版本号:v1.0 
 
 * 问题描述:用递归算法求解汉诺塔问题,其复杂度可以求得为O(2^n) ,是指数级的算法。请到课程主页下载程序运行一下,体验盘子数discCount为4、8、16、20、24时在时间耗费上的差异,你能忍受多大的discCount。 
 
 * 输入描述:无(盘子数已定义) 
 
 * 程序输出:盘子需要移动的次数 
 

*/  

[cpp] view plain copy
  1. #include <stdio.h>    
  2. #define discCount 1               //数值可改动    
  3. long move(intcharchar,char);    
  4. int main()    
  5. {    
  6.     long count;    
  7.     count=move(discCount,'A','B','C');    
  8.     printf("%d个盘子需要移动%ld次\n", discCount, count);    
  9.     return 0;    
  10. }    
  11.     
  12. long move(int n, char A, char B,char C)    
  13. {    
  14.     long c1,c2;    
  15.     if(n==1)    
  16.         return 1;    
  17.     else    
  18.     {    
  19.         c1=move(n-1,A,C,B);    
  20.         c2=move(n-1,B,A,C);    
  21.         return c1+c2+1;    
  22.     }    
  23. }    


运行结果:


知识点总结:

       算法复杂度。

心得体会:

       随着的盘子数的增大,需要移动的次数增大,在时间上的耗费逐渐增大;巩固了递归算法,加深了对算法复杂度的理解,为今后的算法学习有了更深的铺垫。


0 0