【发布时间】:2012-01-01 19:47:14
【问题描述】:
我正在尝试优化我拥有的代码。为了做到这一点,我编写了这段代码来查看递归与迭代的效果。代码“计数”到 10 的 n 次方。
public Form1()
{
InitializeComponent();
Stopwatch sw = new Stopwatch();
sw.Start();
recurse(4);
//iterate(4);
sw.Stop();
Text = sw.Elapsed.TotalMilliseconds.ToString();
}
void recurse(int i)
{
if (i < 1) return;
for (int x = 0; x < 10; x++) recurse(i - 1);
}
void iterate(int i)
{
i = (int)System.Math.Pow(10, i);
for (int x = 0; x < i; x++) ;
}
我得到了这个意想不到的结果:当 n 为 1 到 4 时,递归和迭代的速度都在 0.5 毫秒左右。 - 而不是 4 比我预期的 1 慢 1000 倍。只有对于更大的数字,它才开始具有更直观的速度,迭代也比递归更快。
为什么10次和10000次的速度一样?
【问题讨论】:
-
Iterate 正在运行一个紧密的循环,而 recurse 正在执行一个循环中的调用。感觉这不是一个公平的比较。
-
想想吧。这两种方法做了多少次迭代?他们有完全不同的时间复杂度......这个问题对我来说根本没有意义。
-
@rene 我的问题不是为什么递归更慢。我的问题是为什么 10 次和 10,000 次的速度相同。
-
@vidstige 我的问题不是为什么递归更慢。我的问题是为什么 10 次和 10,000 次的速度相同。
标签: c# performance