运行以下代码时,我最终获得负值.我只使用正数,所以我真的很困惑.我试图看看这个负数是否是返回码,但似乎没有任何代码将此作为数字返回.
public static int fib(int n)
{
int a = 0;
int b = 1;
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = temp + b;
}
return b;
}
static void Main(string[] args)
{
int n = 0;
bool Run = true;
while (Run == true)
{
n = fib(n + 1);
Console.WriteLine(n);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是代码运行时的结果:
1
2
3
5
13
610
-121099088
1
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 12
你只是看到整数溢出.你试图计算fib(610)
哪种方式超出了Int32
可以容纳的范围 - 当你将两个大整数加在一起时,你会得到一个负数.
如果在"已检查"模式下构建它,则会抛出异常 - 或者您可以仅针对所需的一个表达式执行此操作:
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = checked(temp + b);
}
Run Code Online (Sandbox Code Playgroud)
查看MSDN了解更多检测算法.