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 <<
行将作为诊断工具帮助您跟踪呼叫流。
我想做的是 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 <<
行将作为诊断工具帮助您跟踪呼叫流。