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



我想做的是返回所有小于或等于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)

我的递归函数有问题吗?

*操作系统: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 <<行将帮助您作为诊断工具跟踪呼叫流。

相关内容

  • 没有找到相关文章

最新更新