代码之家  ›  专栏  ›  技术社区  ›  shuttle87 Bhargav Boda

c++分段故障处理中的斐波那契扩展[closed]

  •  0
  • shuttle87 Bhargav Boda  · 技术社区  · 14 年前

    我试着把斐波那契数的扩展加入到负指数中。 我试图用c++实现这个功能,但遇到了一个问题,我不知道如何解决它。

    #include <iostream>
    #include <math.h>
    
    
    int fib(int n) {
        if ( n < 0 ){ 
            return ( pow(-1,-n+1 ) * fib(-n) );
        }else if (n == 0){
            return 1;
        }else{
            return fib(n-1) + fib(n-2);
        }
    }
    
    
    int main(void){
        std::cout << "fib("<< -2<<") = " << fib(-2) << std::endl;
        return 0;
    }
    

    这给了我一个错误,你知道为什么吗?

    编辑: 我知道问题出在哪里了。忘记了一个基本情况,这导致了无限递归,这反过来又导致了一个segfault。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Gaim    14 年前

    fib(-2) 它叫 fib(2)

    电话 fib(1) fib(0)

    电话 fib(-1)

    纤维蛋白原(-1) 电话 纤维蛋白原(1) 这是一个永无止境的循环

        2
  •  1
  •   sepp2k    14 年前

    这将导致无限递归。你需要两个案子,而不是一个。

    fib(1) . 这将呼叫 fib(0) fib(-1) 纤维蛋白原(0) 纤维蛋白原(-1) fib(1), which will then again call fib(-1)`无限。

    n==0 n==1 .

    旁注: 纤维蛋白原(0)

        3
  •  1
  •   shuttle87 Bhargav Boda    14 年前

    哦,我犯了一个愚蠢的错误,忘记了n==-1的基本情况。应该是:

    int fib(int n) {
        if( n == -1){
            return 1;
        }else if ( n < 0 ){ 
            return ( pow(-1,-n+1 ) * fib(-n) );
        }else if (n == 0){
            return 1;
        }else{
            return fib(n-1) + fib(n-2);
        }
    }
    

        4
  •  1
  •   vent    14 年前
    According to your extension, shouldn't this be:
    int fib(int n) { 
        if ( n < 0 ){  
            return ( pow(-1,n+1 ) * fib(n) ); // <<<
        }else if (n == 0){ 
            return 1; 
        }else{ 
            return fib(n-1) + fib(n-2); 
        } 
    }