【发布时间】:2017-06-14 14:44:36
【问题描述】:
原来的问题是: 根据定义,定义一个产生第 n 个斐波那契数的函数: fib(0)=1;fib(1)=1;fib(n)=fib(n-1)+fib(n-2)
我试图用 C 编程中的 if & else 结构来解决这个问题。我成功地做到了,并用一些小的输入对其进行了测试。当输入数字为“45”时,一切似乎都很好。但是,当输入“46”时,结果变为负数,这表明一定出了问题。 真的希望有人能告诉我这是为什么,我做错了什么?
源代码:
包括
int fib(int i)
{
if (i == 0)
return 1;
else if (i == 1)
{
int result_1 = fib(i - 1);
return result_1;
}
else
{
int result_2= fib(i-1) + fib(i-2);
return result_2;
}
}
int main(void)
{
printf("The final result is %d\n", fib(i));
return 0;
}
【问题讨论】:
-
它超出了
INT_MAX可能是+2147483647 -
非常感谢。那么有什么方法可以让我得到正确的答案(当输入数字超过 45 时)?
-
您需要使用
long long int而不是int来扩展变量,但这需要C99 std. -
C 不会检查您是否超出特定数据类型的范围。在您的机器上,第一位表示它是否为负数。通常一半的数字是负数,另一半是正数。斐波那契数列呈指数收敛。您可以使用 long 作为示例,但您会很快遇到同样的问题。您可以通过分配一个具有最大正整数值的 int 来轻松测试这一点,然后将其加 1。您会发现自己突然处于负值范围内。
标签: c