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

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

*/  

#include <stdio.h>  #define discCount 1               //数值可改动  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;      }  }  


运行结果:


知识点总结:

       算法复杂度。

心得体会:

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


0 0
原创粉丝点击