void recursive(int n) {
if (n<=0) {
return;
}
printf("%d ",n);
recursive(n-2);
recursive(n-2);
printf("%d ",n);
}
所以我的问题是:除了笔和纸之外,我如何在没有任何工具的情况下确定这段代码的输出(如果我们最初假设 n=3)?是否有任何技术可以标记递归调用的不同级别,因为我一直迷失在试图绕开这个问题。请帮忙!
void recursive(int n) {
if (n<=0) {
return;
}
printf("%d ",n);
recursive(n-2);
recursive(n-2);
printf("%d ",n);
}
所以我的问题是:除了笔和纸之外,我如何在没有任何工具的情况下确定这段代码的输出(如果我们最初假设 n=3)?是否有任何技术可以标记递归调用的不同级别,因为我一直迷失在试图绕开这个问题。请帮忙!
是否有任何技术可以标记递归调用的不同级别
缩进。方格纸使这更容易。将每行中的前k个方块留空,表示您处于递归深度k。
我会试着把它想象成一棵电话树。在这种int n
通过值传递的特殊情况下,您可以复制第一个递归调用的后代。
什么时候n=3
首先 n 将被打印为等于3
然后递归将被调用n=1
所以然后它将打印1
然后递归将被调用n=-1
。这将触发直接返回语句,导致没有输出。最后输出原始数字
对于每个原始递归调用,上述情况将发生两次,从而产生以下输出。
3
1
1
1
1
3