C++函数调用不明白



```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) 被调用时,程序会执行以下过程:

  • P(3) 被调用两次,产生两个 1;
  • P(2) 被调用四次,产生四个 1;
  • P(1) 被调用八次,产生八个 1;
  • P(0) 不被调用,返回。

所以输出结果就是 112112311211234。

在输出之前调用P(W-1)输出了更小的值,递归一下就是先输出最小值。