如何计算递归函数的输出?我知道递归会调用堆栈,但在解决一些能力问题时却很困惑.
给出以下代码段:
#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)
这不是任何家庭作业,但我无法在考试条件下解决这样的问题.(没有编译器的理论考试)
解决这个问题的标准方法是什么?请用一个小例子来解释.欢迎使用正确方向的指针或某个网站链接.
拿笔和纸; 绘制函数的调用以及参数 - 你将有一种二叉树.跟踪执行并在页面上写入所有相关数据.它还可以帮助您了解功能.
递归调用中涉及的分支(尤其是像这样的二进制调用)在您在纸上绘制时非常合乎逻辑且直观.这就是我在学校里被教导的方式 - 而且这是一种理解这样的东西的好方法,至少在一开始并不是一切都是直观的.
例:
fun [5]
/ \
fun[4] fun[3]
/ \ | \
fun[3] fun[2] fun[2] fun[1]
Run Code Online (Sandbox Code Playgroud)
我画了调用树,就像你在纸上画它一样.这应该有助于让你发现更清楚的事情.这就是我当天处理这类东西的方式,所以相信我 - 它有效:)