```c++
void P(int W)
{
if (W>0)
{ P(W-1);
P(W-1);
cout<<W;
}
}
调用 P(4);
想问一下,为什么这个函数调用结果是 112112311211234?
这是递归
第一次调用 P(4):
第一次调用 P(3):
第一次调用 P(2):
第一次调用 P(1):
输出 1
第二次调用 P(1):
输出 1
输出 2
第二次调用 P(2):
第一次调用 P(1):
输出 1
第二次调用 P(1):
输出 1
输出 2
输出 3
第二次调用 P(3):
第一次调用 P(2):
第一次调用 P(1):
输出 1
第二次调用 P(1):
输出 1
输出 2
第二次调用 P(2):
第一次调用 P(1):
输出 1
第二次调用 P(1):
输出 1
输出 2
输出 3
输出 4
最终输出结果为:1 1 2 1 1 2 3 1 1 2 1 1 2 3 4
参考GPT和自己的思路:这个函数会不断地递归调用自身,直到 W 小于等于 0 为止。而在递归调用中,每个 P(W-1) 函数会被调用两次,然后输出 W 的值。
所以当 P(4) 被调用时,程序会执行以下过程:
所以输出结果就是 112112311211234。
在输出之前调用P(W-1)输出了更小的值,递归一下就是先输出最小值。