如何在纸上分析这种递归函数?

时间:2012-06-16 19:52:07

标签: recursion

void recursive(int n) {
  if (n<=0) {
  return;
  }
printf("%d ",n);
recursive(n-2);
recursive(n-2);
printf("%d ",n);
}

所以我的问题是:我如何确定这段代码的输出(如果我们假设n = 3最初)没有任何工具,只有笔和纸?是否有任何技术可以记录递归调用的不同级别,因为我总是迷失在试图绕过这个问题。请帮忙!

2 个答案:

答案 0 :(得分:1)

  

是否有任何技术可以记录递归调用的不同级别

压痕。方格纸使这更容易。在每行中保留第一个 k 方块为空,表示您处于递归深度 k

答案 1 :(得分:0)

我会尝试将其视为呼叫树。在这种特殊情况下,int n按值传递,您只需复制第一次递归调用的后代即可。

n=3

第一个n将打印等于3 然后使用n=1调用递归,然后它将打印1 然后使用n=-1调用递归。这将触发直接返回语句,导致无输出。 最后输出原始数字

对于每个原始递归调用,上述情况将发生两次,从而产生以下输出。

3
1
1
1
1
3