cpp 中的递归函数给出错误 "Segmentation fault (core dumped)"

recursive function in cpp gives error "Segmentation fault (core dumped)"

我想做的是 return 所有低于或等于 n 的数字的总和,它们是 3 或 5 的倍数,我试图在 c++ 中用递归函数:

#include <iostream>

int getsum(int n);

int main(int argc, char *argv[]){

    std::cout<<getsum(10);
    
    return 0;
}

int getsum(int n){

    if(n%3==0 || n%5==0)
        return n+getsum(n-1);
    if(n==0) 
        return 0;
    else
    {
        return getsum(n-1);
    }
    
}

然后,当我尝试 运行 这段代码时,出现分段错误:


Segmentation fault (core dumped)

我的递归函数有问题吗?

*OS:Ubuntu 18.04

问题是当n达到零时,你就进入了区块。

if(n%3==0 || n%5==0)
    return n+getsum(n-1);

一旦 n 达到负数,递归调用就会一直进行下去。这会导致堆栈溢出。

你应该首先移动对零的支票。

int getsum(int n)
{
   std::cout << "n: " << n << std::endl;

   if(n==0) 
   {
      return 0;
   }
   if(n%3==0 || n%5==0)
   {
      return n+getsum(n-1);
   }
   else
   {
      return getsum(n-1);
   }
}

附加的 std::cout << 行将作为诊断工具帮助您跟踪呼叫流。