/*
* 烟台大学计算机与控制工程学院
*文件名称:main.cpp
*作 者:王旭
*完成日期:2015年9月12日
*版 本 号:v1.0
*
*问题描述:汉诺塔(详情略)用递归算法求解汉诺塔问题,其复杂度可以求得为O(2的n次方)
*输入描述:无
*程序输出:给出的盘子个数要移动多少次 程序运行所用时间
*/
#include <stdio.h>
#define discCount 8
#include <time.h>
long move(int, char, char,char);
int main()
{
double t1,t2;
long count;
t1=time(0);
count=move(discCount,'A','B','C');
t2=time(0);
printf("%d个盘子需要移动%ld次\n", discCount, count);
printf("用时 %d 秒!", (int)(t2-t1));
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;
}
}
程序如上,原程序上加入了计算时间的代码。
如图,8个盘子移动255次,程序运行用时0秒
如图 24个盘子要用1600多万次 程序运行时间0秒
如图 30个盘子次数nnnnn次 程序运行用时21秒