问题及代码:
/*
*Copyright (c) 2015 烟台大学计算机与控制工程学院
*All right reserved.
*文件名称:hannuota.cpp
*writer:马笑媛
*date:2015年9月18日
*版本:V1.0.1
*
*问题描述:体验复杂度为O(2^n)的函数的运算时间
*输入描述:输入盘子的数目
*程序输出:输出移动盘子的次数以及函数运行的时间
*/
#include <stdio.h>
#include <time.h>
//#define discCount 30
long move(int, char, char,char);
int main()
{
int discCount;
printf("请输入您想设置的金片数量:\n");
scanf("%d",&discCount);
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;
}
}
运行结果:
知识点总结: