Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 需要解释一下我的斐波那契程序吗_C_Fibonacci - Fatal编程技术网

C 需要解释一下我的斐波那契程序吗

C 需要解释一下我的斐波那契程序吗,c,fibonacci,C,Fibonacci,在下面的代码中,fibr(n)和fibnr(n)都返回一个int。当n较小时,返回的值是正确的,但当n较大时,结果溢出,结果不再可靠。如果返回类型仍然是int,那么结果准确的n范围是多少?如果返回类型是unsigned、long、unsigned long、long或unsigned long,该怎么办 #include <stdio.h> #include <stdlib.h> int fibr (int n ) { // using recursive met

在下面的代码中,
fibr(n)
fibnr(n)
都返回一个int。当
n
较小时,返回的值是正确的,但当
n
较大时,结果溢出,结果不再可靠。如果返回类型仍然是
int
,那么结果准确的
n
范围是多少?如果返回类型是
unsigned
long
unsigned long
long
unsigned long
,该怎么办

#include <stdio.h>
#include <stdlib.h>

int fibr (int n ) {    // using recursive method
    if (n==0) return 0 ;
    else if (n==1) return 1;
    else {
        return (fibr(n-1)+2*fibr(n-2));
    }
}

int fibnr (int n ) {
    int a=0;
    int b=1;
    if (n==0) return a;
    else if (n==1) return b;
    else {
        int sum=0 ;
        int i ;
        for (i=2;i<=n;i++) {
            sum=a+(2*b);
            a=b;
            b=sum;
        }
        return sum;
    }
}
#包括
#包括
int fibr(int n){//使用递归方法
如果(n==0)返回0;
如果(n==1),则返回1;
否则{
返回(纤维(n-1)+2*纤维(n-2));
}
}
内部光纤(内部网络){
int a=0;
int b=1;
如果(n==0),则返回a;
如果(n==1),则返回b;
否则{
整数和=0;
int i;
对于(i=2;i

因此,您只需检查“真实”斐波那契序列,并根据您决定选择的类型,查看输出何时会超出范围……使用“unsigned long long long”类型,您将达到序列的第93个数字,您必须采取其他措施。可能是一个可以处理大数字的库,也可能是一个切换到双精度的库(高达1.7e+/-308)。

你能更清楚地解释你的问题吗?当我测试你的fib函数时,我得到以下结果:。(有趣的是,这两个结果都是错误的)解释是“整数溢出”。查一下。
sum=a+(2*b);
-->
sum=b+(2*a)
正如BLUEPIXY所指出的,
fibnr
计算的值是错误的,所以它的结果不会与
fibr
的结果相同。这就是你的问题所在吗?请注意,你的帖子中没有实际的问题。在这样的情况下制定一个好问题的第一步(你的问题非常不好)字节数和范围取决于编译器和体系结构,但这些结果对于针对x86和x64的VC++来说是准确的。这个问题已经稍微澄清了
Type Name             |   Bytes   |     Ranges of Values
-------------------------------------------------------------------
integer               |     4     | –2,147,483,648 to 2,147,483,647
                      |           |
unsigned integer      |     4     | 0 to 4,294,967,295
                      |           |
long integer          |     4     | –2,147,483,648 to 2,147,483,647
                      |           |
unsigned long integer |     4     | 0 to 4,294,967,295
                      |           |
long long             |     8     | –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
                      |           |
unsigned long long    |     8     | 0 to 18,446,744,073,709,551,615