我有以下用c#编写的幂函数:
public static double pow2(double x, double n)
{
if (n == 0)
return 1;
else
{
stepAccumulator++;
return pow2 (x, Math.Floor (n / 2.0)) * pow2 (x, Math.Ceiling (n / 2));
}
}
当我运行程序时,我只需说result=pow2(1,1000);
然后使用Stopwatch
对象计时,然后在结尾打印结果。不幸的是,当我运行这个程序时,我收到以下错误:由于StackOverflowException ,进程终止。为什么会发生这种情况?如何阻止它呢?
答案 0 :(得分:5)
Math.Ceiling(n/2)
pow
案件永远不会n == 0
Math.Ceiling(1/2) == 1
pow2
。使用n == 1
调用return pow2 (x, Math.Floor (1 / 2.0)) * pow2 (x, Math.Ceiling (1 / 2));
后,接下来的两个电话将是:
return pow2 (x, 0) * pow2 (x, 1);
与以下内容相同:
pow2
这导致另一次调用n == 1
{{1}},因此您的算法永远不会终止