如何计算输出?

1 c recursion

如何计算递归函数的输出?我知道递归会调用堆栈,但在解决一些能力问题时却很困惑.

给出以下代码段:

#include <stdio.h>

void fun(int a){
 if(a>0){
    fun(--a);
    printf("%d ",a);
    fun(--a);
    printf("%d ",a);
 }
return;
}

int main(void){
  int  num = 5;
  fun(num);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不是任何家庭作业,但我无法在考试条件下解决这样的问题.(没有编译器的理论考试)

解决这个问题的标准方法是什么?请用一个小例子来解释.欢迎使用正确方向的指针或某个网站链接.

rmn*_*rmn 8

拿笔和纸; 绘制函数的调用以及参数 - 你将有一种二叉树.跟踪执行并在页面上写入所有相关数据.它还可以帮助您了解功能.

递归调用中涉及的分支(尤其是像这样的二进制调用)在您在纸上绘制时非常合乎逻辑且直观.这就是我在学校里被教导的方式 - 而且这是一种理解这样的东西的好方法,至少在一开始并不是一切都是直观的.

例:

            fun [5]
          /        \
       fun[4]       fun[3]
      /      \        |    \
  fun[3]   fun[2]   fun[2]  fun[1]
Run Code Online (Sandbox Code Playgroud)

我画了调用树,就像你在纸上画它一样.这应该有助于让你发现更清楚的事情.这就是我当天处理这类东西的方式,所以相信我 - 它有效:)