Chi*_*izx -3 c# stack-overflow
我有以下用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));
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我只是说result=pow2(1,1000);,然后使用Stopwatch对象计时,然后在结尾打印结果.不幸的是,当我运行此程序时,我收到以下错误:由于StackOverflowException,进程终止.为什么会这样,我怎么能阻止它呢?
你的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));
Run Code Online (Sandbox Code Playgroud)
这与以下相同:
return pow2 (x, 0) * pow2 (x, 1);
Run Code Online (Sandbox Code Playgroud)
这导致另一个调用pow2with n == 1,因此您的算法永远不会终止