求指导,这段代码,当n=4时,不就应该执行最后一句吗

#include<stdio.h>
void up(int);
int main(void)
{

up(1);
return 0;

}

void up(int n)
{
printf("%d: n is %p\n", n, &n);//x
if (n < 4)
up(n + 1);
printf("%d:n is %p\n", n, &n);//y
}
求指导,这段代码,当n=1时,执行x,,n=2,执行x,n=3,执行x,当n=4,执行X并执行有y,执行完Y,应该回到主函数main才对,接着执行UP(1)下面的return=0才对,
为啥实际还会执行n=3 ,2,1呢,这是怎么来的?求指导求指导

那是递归啊,递归之后你还是打了输出的代码
img

没有啊,就是1234,然后4321没问题啊

这是一递归题,递归通俗的说:就像皇帝叫大臣做一件事,然后大臣再叫知县去做,知县办好了,上报大臣,大臣处理完再上报皇帝。
你也可以看下面的图:

img

下面还有递归求6的阶乘的图:
img

你可以去搜递归,看懂递归了你这道题就懂了。
你去百度里搜这个网址也行 :https://www.zhihu.com/question/20507130/answer/921929860