gpt4 book ai didi

c++ - C++中的递归函数崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:10 28 4
gpt4 key购买 nike

一位在线 friend 告诉我这应该可以工作(应该不会崩溃),但他没有给我任何实际的建议来解决这个问题。抱歉,如果这个问题过于简单,我还是个初学者!

#include<iostream>
using namespace std;

int f(int n)
{
if((n-1)==1) return 1;
else return 2*f(n)-n;
}

int main()
{
cout<<f(1)<<endl;
cout<<f(1)<<endl;
cout<<f(0)<<endl;
cout<<f(-3)<<endl;
cout<<f(-10)<<endl;
return 0;
}

最佳答案

编译所有警告和调试信息(例如 g++ -Wall -Wextra -gGCC ),改进你的代码以获得没有警告,然后运行你的程序在调试器中逐步(例如gdb)。

当使用调试器时,你会发现你有一个无限递归,因为 f(n) 正在调用 f(n)

编写递归函数时,注意过多的call stack深度。根据经验,每个单独的调用帧应该小于一千字节,并且整个调用堆栈限制在大约一兆字节(或几兆字节)。详细信息是特定于实现和操作系统的。

还要注意一些 optimizing compilers (包括最近的 g++,当使用 -O2 或更好的方式调用时)能够优化一些 tail calls进入迭代代码。

关于c++ - C++中的递归函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434096/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com