用C语言获得递归级别?

时间:2011-05-13 01:03:05

标签: c unix recursion

我正在编写一个递归函数(用C语言编写),需要一种方法来知道递归是否已经完成。我想知道我是否可以用变量或标志来做。以功能为例。

例如,如果递归下降了3级然后又回来了,有没有办法检查我是否处于1级......使用标志?

lev 1 - > lev 2 - > lev 3 - > lev 2 - > lev 1(点击这里)

5 个答案:

答案 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;
}