我正在编写斐波那契数列的代码,在第44个学期后,我开始在数列中得到负值,我不知道为什么?

时间:2019-05-25 10:30:15

标签: c

“我正在编写斐波那契数列的代码,并且在第44个学期开始后,为什么我开始在数列中得到负值?

#include <stdio.h>
int main(void)
{
  int i, n , t1 = 0 ,t2 = 1 ,next;
  printf("Enter the number of terms for series:");
  scanf("%d", &n);
  while(i<=n){
    next = t1 +t2 ;
    t1 = t2;
    t2 = next;
    printf("%d\n", next);
    i++;
  }
  return 0;
}

“预期输出是斐波那契数列,直到任何数量的任期,但在第44个任期之后,我开始逐渐获得负数序列”

2 个答案:

答案 0 :(得分:2)

您得到负值,因为斐波那契数列的第45个元素超过了整数可以达到的最大值。 (2147483647)

答案 1 :(得分:0)

我没有测试程序,但是我想我知道答案。

这个数字往往很快就会变得很大。 44已经是一个很大的数字。 (例如,您可以使用调试器查看发生了什么。)

很有可能“ int”的大小不足以容纳数字,因此发生了一些意外情况。

尝试修改程序以使用64位变量(“ long long”)。事情将会改变。甚至“ unsigned int”也将为您提供更多的空间,但数量不多。


其他提示:

  1. 使用“ for”代替“ while”,因为这是您的实际意图。
  2. 优良作法是在使用变量之前初始化变量。在初始化之前使用“ i”和“ next”。