弱弱的问问,关于递归函数的问题
使用递归函数的时候,函数的结果往往不能够仅仅通过调用一次函数就能够得到。那么如果某一次调用递归函数的时候,
这个递归函数一共被调用了3次,那么这个函数中的所有的局部变量是不是都有三个版本?这些临时的版本是同时存在的吧,那么是不是就是说,如果某个递归函数的调用使得该递归函数实际上被调用了太多次,那么就可能把内存给占满?
[解决办法]
递归层次太深就会导致栈溢出(一般OS会给一个进程分配几M的栈空间)
可以改为非递归或者手动修改栈的大小
[解决办法]
每次的局部变量,都会存放在栈上,如同一系列盘子叠放在一起。
堆栈的空间是有限的,所以在内存耗尽以前,你的程序就会因为堆栈溢出而出错。
如果你想知道堆栈能放多少,可以编写下面的程序:
void foo(int x);
int Main()
{
foo(0);
return 0;
}
void foo(int x)
{
//int i = 0;
//int j = 0; //你可以打开注释看有什么不同
cout << x << endl;
foo(x + 1);
}
[解决办法]
}
有没有一种机制来针对stack overflow进行错误提示呢?