为什么在递归函数中出现段错误。每当参数值大于4时,都会发生这种情况

#include <iostream>
#include <limits>

using namespace std;

int printSeries(int n){
    if(n==1){
        return 1;
    }
    else if( n==2){
        return 2;
    }
    else if( n==3){
        return 3;
    }
    else if( n==4){
        return printSeries(1) + printSeries(2) + printSeries(3);
    }
    else{
        return printSeries(n-3) + printSeries((n-2) + printSeries(n-1));
    }
}


int main(){

        //double infinity = numeric_limits<double>::max();

        for(int i=1; i<=10; i++){
            cout << printSeries(i) << endl;
        }

    return 0;

}

这工作正常,但我不确定返回正确的结果:
return printSeries(n-3) + printSeries(n-2) + printSeries(n-1);

最佳答案

return printSeries(n-3) + printSeries( (n-2) + printSeries(n-1) );
//                                     ^^^^^^^^^^^^^^^^^^^^^^^^

括号的不正确嵌套会导致无限递归,从而导致堆栈溢出(segfault)。

考虑当n = 4时
f(4) = 1 + f(2 + f(3))
     = 1 + f(2 + 3)
     = 1 + f(5)
     = 1 + [ f(2) + f(3 + f(4)) ]
     = ...

10-05 18:06