原创(个人认为):小改进了一下斐波那契数列的递归,但运行时间测试不稳定!!

tangpanshui 2008-04-04 02:00:48
我用了一个一维数组来缓冲暂存深度搜索时的数列的各个值,哪么只要搜索一遍就可以了。
不用再做无用功,继续在算一遍了。请大家多多指教,只是时间和效率上的测试,我不太会用,
只是简单的测试了一下,不太好,请大家多批评指正,呵呵。
下面是源代码,在dev-cpp下通过。

//TIME.h
class CTime
{
private:
LARGE_INTEGER StartCount;
LARGE_INTEGER CurrentCount;
LARGE_INTEGER Frequency;
public:
CTime();
void Start();
void End();
void ShowResult();
};

//cuo70.cpp
/*参考了网上的一些测试时间的做法,在此感谢。忘了网址了,不好意思:-)*/
#include <iostream>
#include <windows.h>
#include "TIME.h"
using namespace std;
CTime::CTime()
{QueryPerformanceFrequency(&Frequency);}
void CTime::Start()
{QueryPerformanceCounter(&StartCount);}
void CTime::End()
{QueryPerformanceFrequency(¤tCount);}
void CTime::ShowResult()
{cout << double(CurrentCount.LowPart - StartCount.LowPart) / (double)Frequency.LowPart;}

//cuo8.cpp
#include <iostream>
#include <windows.h>
#include "TIME.h"
using namespace std;
int F(int);
int main ()
{
int max = 33;
CTime count_time;
count_time.Start();
cout << F(max) << endl;
count_time.End();
count_time.ShowResult();
system("pause");
return 0;
}
int F(int n)
{
if (n == 0) return 1;
if (n == 1) return 1;
if (n > 1) return F(n-1)+F(n-2);
}
大家放到一个工程里编译一下就好了。呵呵。
...全文
129 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangpanshui 2008-04-06
  • 打赏
  • 举报
回复
TO:hityct1
呵呵,是啊。毕竟现在空间不值钱而时间值钱啊。
但是貌似测试的方法不太好,不稳定,效率对比也没有体现出来。
有没有更好的一些方法或者现成的工具使用啊?推荐一下!
hityct1 2008-04-05
  • 打赏
  • 举报
回复
呵呵。空间换时间。
andywiliang 2008-04-05
  • 打赏
  • 举报
回复




请高手坐阵本群管理员
C C++ C# JAVA编程交流群:11713348
tangpanshui 2008-04-04
  • 打赏
  • 举报
回复
TO:gccli
好像结果是这样,可是为什么呢?貌似应该有一定的提高才对啊。
是不是时间只是花在了递归的深度上,而不是次数上的原因啊?
因为二者的递归深度应该是一样的。多谢关注!
tangpanshui 2008-04-04
  • 打赏
  • 举报
回复
TO:Leejun527
可以设计一个大数类来管理,或者用别的方法,肯定有很多。
我的程序只是关注运行效率问题,其他的没有多考虑。
多谢提醒!
gccli 2008-04-04
  • 打赏
  • 举报
回复
两者效率差不了多少
Leejun527 2008-04-04
  • 打赏
  • 举报
回复
如果n=1000呢?
tangpanshui 2008-04-04
  • 打赏
  • 举报
回复
不好意思,上面的是原来的传统的递归做法,我的在这:

//TIME.h和cuo70.cpp不变,只要把他们和下面的主函数的代码放到一个工程里编译一下就好了。
//cuo7.cpp
#include <iostream>
#include <windows.h>
#include "TIME.h"
using namespace std;

int fib[34];//暂存用的数组
int F(int n);
int main ()
{
int max = 33;
CTime count_time;
count_time.Start();
cout << F(max) << endl;
count_time.End();
count_time.ShowResult();
system("pause");
return 0;
}
int F(int n)
{
//if (n == 0) return fib[0] = 1;
if (n == 1) return fib[0] = 1;
if (n > 1) return (fib[n-1] = F(n-1))+fib[n-2];
}
大家可以和原来的传统递归方法相比较一下,效率是不是有了较大的提高?
我不太懂这方面,还请诸位大牛多多指教。谢谢啦!

64,849

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧