递归调用C语言,c语言编写递归函数
递归算法具有易于编程的特点;但是,由于编译器预先分配的堆栈空间的限制,递归深度并不是无限的。
在递归的过程中,系统会保存(推入堆栈)当前程序的运行状态,将参数推入堆栈,然后递归。
递归完成后,进行堆栈操作。
当递归深度较深时,递归无法继续,因为堆栈已满。
那么,递归的深度是什么?如果我们在没有参数传递的情况下创建递归,是否会节省更多的内存,从而增加递归的深度?
程序:测试C编译器的递归深度
/*
测试C语言的递归深度
g结果:
外宾:43273
F1: 43273
F2: 43266
VC2012结果:
外宾:85588
F1:44998
F2: 42773
#包括iostream
使用命名空间std
int n;
int times=0;
void F()
如果(n==1)
返回;
其他
cout times endl
n=n-1;
f();
void F1(整数n)
如果(n==1)
返回;
其他
cout times endl
n=n-1;
f1(n);
typedef结构数据{
int a,b;
}数据;
void F2(int n,Data data)
如果(n==1)
返回;
其他
cout times endl
n=n-1;
F2(n,数据);
}
从上面的程序来看,在一定的编译器和编译参数下,不同的参数传递方法似乎对递归深度没有太大的影响。
问题:编译器是否限制了递归的深度?还是内存不够?
结果:递归算法要慎用!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。