我尝试过的代码:
int main(void)
{
int fib[50];
fib[0] = 1;
fib[1] = 2;
int i;
for ( i = 0; i < 50; i++)
{
if (i == 0)
{
printf("%d ,", fib[0]);
}
else if (i == 1)
{
printf("%d ,", fib[1]);
}
else if (i == 49)
{
fib[i] = fib[i-1] + fib[i-2];
printf("%d", fib[i]);
}
else
{
fib[i] = fib[i-1] + fib[i-2];
printf("%d ,", fib[i]);
}
}
printf("\n");
return (0);
}
我得到的结果:
1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 ,89 ,144 ,233 ,377 ,610 ,987 ,1597 ,2584 ,4181 ,6765 ,10946 ,17711 ,28657 ,46368 ,75025 ,121393 ,196418 ,317811 ,514229 ,832040 ,1346269 ,2178309 ,3524578 ,5702887 ,9227465 ,14930352 ,24157817 ,39088169 ,63245986 ,102334155 ,165580141 ,267914296 ,433494437 ,701408733 ,1134903170 ,1836311903 ,2971215073 ,512559680 ,3483774753 ,3996334433 ,3185141890 ,
int
溢出。
int
值有一个有限的(特定于平台)范围。尝试一下
long long
。另外,您可以大大简化这里的逻辑。例如,您可以在循环之前打印前两个值;之后逻辑就正常了,不需要
if
。喜欢,
long long fib[50];
fib[0] = 1;
fib[1] = 2;
int i;
printf("%lld, %lld", fib[0], fib[1]);
for ( i = 2; i < 50; i++)
{
fib[i] = fib[i-1] + fib[i-2];
printf(", %lld", fib[i]);
}
printf("\n");
return (0);