C 如何处理这种递归程序

C 如何处理这种递归程序,c,recursion,C,Recursion,简单递归问题的答案很容易预测,但当它一次涉及多个调用时,它就会变得很困难(这里e(--n)被调用两次 在单个范围块中)。 我的问题是如何通过创建树型结构来解决这类程序 void e(int); int main(void) { int a = 3; e(a); putchar('\n'); return 0; } void e(int n) { if (n > 0) { e(--n); printf("%d ", n);

简单递归问题的答案很容易预测,但当它一次涉及多个调用时,它就会变得很困难(这里e(--n)被调用两次 在单个范围块中)。 我的问题是如何通过创建树型结构来解决这类程序

void e(int);

int main(void)
{
   int a = 3;
   e(a);
   putchar('\n');
   return 0;
}

void e(int n)
{
   if (n > 0)
   {
      e(--n);
      printf("%d ", n);
      e(--n);
   }
}

如果你用铅笔在一张纸上完成,你应该得到:

call=>e(3)

call=>e(2)
call=>e(1)
call=>e(0)
初始打印F:0
call=>e(-1)
初始打印f:1
call=>e(0)
初始打印F:2
call=>e(1)
call=>e(0)
初始打印F:0

call=>e(-1)

一支铅笔和一张纸在这里最合适。或者使用您喜爱的调试器单步执行程序也可能有所帮助。