程序执行时间?
转自:http://www.cnblogs.com/laov/archive/2012/02/12/2347754.html
经常会看到一些人,问你,“来,写一个递归算法吧”。递归算法真的那么好吗?下面是经常看到的一些题目,还有,递归算法的优缺点!
常见题:
1、计算数组{1,1,2,3,5,8,13...}第30位的值
Process1
Static void Main(string[] args)
{
Console.WriteLine(Process1(30));
Console.ReadKey();
}
Public Static int Process1(int i)
{
if(i==0) return 0;
if(i==1) return 1;
else
return Process1(i-1)+Process1(i-2);
}
复制代码
从此递归我们可以看出,递归就是从后面往前推获得数据,然后进行运算
但是如果第一题中的30改为40或者更大的数字,你有没有试过呢?
下面我们用Stopwatch来检测一下运行时间
递归-时间检测
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
Console.WriteLine(Process1(40));
Console.WriteLine(watch.Elapsed);
watch.Stop();
Console.Read();
}
public static int Process1(int i)
{
if (i == 1) return 1;
else if (i == 2) return 1;
else
{
return Process1(i - 1) + Process1(i - 2);
}
}
复制代码
我们运行程序,卡一会,然后输出结果为:
运行了5秒,这才是当i=40的时候,那如果设置i为50,或更大,那要等的时候就更长了。
递归优点,简单明了,容易理解;缺点,就是效率低。
下面我们来优化一下,用如下的代码:
优化方法-时间监测
static void Main(string[] args)
{
Stopwatch watch = new Stopwatch();
watch.Start();
int[] num = new int[40];
num[0] = 1;
num[1] = 1;
int first = num[0];
int second = num[1];
for (int i = 2; i < num.Length; i++)
{
num[i] = first + second;
first = second;
second = num[i];
}
Console.WriteLine(num[39]);
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.ReadKey();
}
复制代码
然后我们来看一些运行结果如何:
运行的时间,瞬间缩短了。。。。。。。。。
这种方法,将数据从前往后推,得出最终结果。
看来我们以后还要慎用递归算法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架