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

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

4

2 回答 2

1

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

缩进。方格纸使这更容易。将每行中的前k个方块留空,表示您处于递归深度k

于 2012-06-16T19:59:37.690 回答
0

我会试着把它想象成一棵电话树。在这种int n通过值传递的特殊情况下,您可以复制第一个递归调用的后代。

什么时候n=3

首先 n 将被打印为等于3 然后递归将被调用n=1所以然后它将打印1 然后递归将被调用n=-1。这将触发直接返回语句,导致没有输出。最后输出原始数字

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

3
1
1
1
1
3
于 2012-06-16T20:00:00.360 回答