C语言运行结果的时候为什么会出现负数

#include<stdio.h>
int fib(long n)
{
if(n<=1)
return 1;
return fib(n-1)+fib(n-2);
}
main()
{
long n,x;
scanf("%ld",&n);
x=fib(n);
printf("%ld
",x);
getch();
}
输入N为23 的时候就出现负值了,但是在输入22的时候还是正确答案,求解

你的值超过int表示的最大正数了,
int类型换成unsigned
int
或者double
类型试试,输出结果的时候,不输出小数点
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-15
你的值超过int表示的最大正数了,
int类型换成unsigned
int
或者double
类型试试,输出结果的时候,不输出小数点
第2个回答  推荐于2017-12-15
看这里,你的函数返回值为整形int fib(long n)

整形的范围是 -32768~32767;
必然是溢出了。本回答被提问者采纳
第3个回答  2013-09-24
我用个Gcc编译运行后,是正确的哦! 23==46368[
第4个回答  2013-09-24
经过测试,23的时候也可以返回正确的值
相似回答