void recursive(int n) {
if (n<=0) {
return;
}
printf("%d ",n);
recursive(n-2);
recursive(n-2);
printf("%d ",n);
}
所以我的问题是:我如何确定这段代码的输出(如果我们假设n = 3最初)没有任何工具,只有笔和纸?是否有任何技术可以记录递归调用的不同级别,因为我总是迷失在试图绕过这个问题。请帮忙!
答案 0 :(得分:1)
是否有任何技术可以记录递归调用的不同级别
压痕。方格纸使这更容易。在每行中保留第一个 k 方块为空,表示您处于递归深度 k 。
答案 1 :(得分:0)
我会尝试将其视为呼叫树。在这种特殊情况下,int n
按值传递,您只需复制第一次递归调用的后代即可。
n=3
第一个n将打印等于3
然后使用n=1
调用递归,然后它将打印1
然后使用n=-1
调用递归。这将触发直接返回语句,导致无输出。
最后输出原始数字
对于每个原始递归调用,上述情况将发生两次,从而产生以下输出。
3
1
1
1
1
3