c++ - 递归累积和

标签 c++ recursion

我正在尝试用 C++ 编写一个简单的递归求和函数:

long long int recursum(long long int n){
    if(n==1)
        return 1;
    else
        return recursum(n-1)+n;
}

这应该可行,但我得到值大于 ~250000 的段错误。我非常确定这应该可行,因为它是一个非常简单的带有终止语句的递归。

最佳答案

您必须为您的编译器激活优化以尝试“取消递归”函数,以免破坏您的调用堆栈。

在我的电脑上测试的例子

#include <iostream>

long long int recursum(long long int n){
    if(n==1)
        return 1;
    else
        return recursum(n-1)+n;
}


int main(int argc, char const *argv[])
{
    std::cout << recursum(99000) << std::endl;
    return 0;
}

没有优化:

$ ./a.exe
Segmentation fault (core dumped)

使用 g++ -O3:

$ ./a.exe
4900549500

我什至尝试使用 500000。

如果没有特定的优化需求,尾递归优化和类似的事情(我不知道其他人的名字)是不会做的。

关于c++ - 递归累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20458132/

相关文章:

c++ - 在图像顶部模拟天体(星星)

c++ - 'U' 不指代一个值

python - 我想要一个程序将所有可能的组合写入文本文件的不同行

Java:递归地将节点添加到 JTree

c++ - 是否可以在不同位置为一个引用分配不同的值?

c++ - 当对象超出范围时是否调用析构函数?

c++ - 调用专用模板函数时强制编译时错误

c - 为什么return语句不结束c中的递归函数?

c++ - 用递归函数实现 neper number (e)

java - 推广移动搜索算法以使用递归