我想做的是返回所有小于或等于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 <<
行将帮助您作为诊断工具跟踪呼叫流。