函数在递归调用时会占用栈的空间,因此,当递归达到一定的深度时,就会出现栈溢出的情况。
下面的代码,函数的参数值为多少,就进行了多少次递归。这个程序直接运行,得不得最终的结果:2000000,
因为栈没有那么大。
#include "stdio.h"
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}
增加栈的大小的方法:
在vc++中,使用#pragma comment(linker, "/STACK:1000000000")语句,
其中STACK:后面的数字为指定的栈的大小。
#include "stdio.h"
#pragma comment(linker, "/STACK:1000000000")
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}
在g++(即DEV-C++)中,采用如下办法
#include "stdio.h"
#include "stdlib.h"
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int size = 256 << 20; // 指定栈大小为256MB
char *p = (char*)malloc(size) + size;
__asm__("movl %0, %%esp\n" :: "r"(p));
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}