我正在编写一个递归函数(用C语言编写),需要一种方法来知道递归是否已经完成。我想知道我是否可以用变量或标志来做。以功能为例。
例如,如果递归下降了3级然后又回来了,有没有办法检查我是否处于1级......使用标志?
lev 1 - > lev 2 - > lev 3 - > lev 2 - > lev 1(点击这里)
答案 0 :(得分:3)
您需要在int level
的行中为函数添加额外的参数。然后在递归调用自己时传递level+1
,并将0
(或1
,如果您愿意)传递给初始调用。
答案 1 :(得分:0)
如果您不关心可移植性,可以手动展开调用堆栈。但是我怀疑R的解决方案 更好地解决了你的问题。
答案 2 :(得分:0)
答案取决于实际问题。没有存储某种标志,你无法分辨(以便携式方式)。
但是,您的递归函数可能会以某种方式改变某些数据,以至于它可以判断它是否先前已经进入某个递归深度。另一方面,这只是说存储标志值的一种复杂方式。
答案 3 :(得分:0)
也许您可以检查调用堆栈,但它取决于您正在处理的实际级别或递归,否则如果仅用于调试/理解目的,请使用R ..解决方案。
答案 4 :(得分:0)
如果你想玩堆栈......
int func(void *p,int n, int stacksize)
{
char marker;
int depth = (int)p -(int)&marker ;
printf("%d --- %d --- %d\r\n", n,depth, stacksize?depth/stacksize:0);
if (n>10)
return depth ;
return func(p,n+1,stacksize);
}
int main()
{
char marker;
int onepass = func(&marker,11,0);
func(&marker,0,onepass );
return 0;
}