运行结果怎么得到的?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

void fun(int x)
{
if (x/2 > 1) fun(x/2);
printf("%d", x);
}
main()
{
fun(7);
}

运行结果及报错内容

37

我的解答思路和尝试过的方法

我自己的逻辑运算是 1 ,没看懂答案

我想要达到的结果

printf函数是没有在if语句之中的,也就是一定会被执行到,相当于一个递归,执行了fun(7)fun(3)两次,先输出一次3,再输出7

fun(7) 进去时 x=7,判断 7/2=3 > 1,可以进入if里面,然后执行 fun(x/2),也就是 fun(3),fun(3) 进去时 x=3,判断 3/2=1 = 1,不可以进入if里面,所以执行 fun(x/2) 的 if判断下面的输出语句,此时 x=3,所以输出结果第一个为3。然后 fun(x/2) 执行完毕,回到 fun(7)的if判断里面,接着执行if判断下面的输出语句,此时 x=7,上面的 x/2 并不会改变 x 的值,因为它没有赋值给 x,所以输出 7。因为没有换行,所以结果是37。
执行下面的代码能帮你更好地了解

#include <stdio.h>
void fun(int x)
{
    printf("x=%d\n",x);
    if (x/2 > 1) {
      printf("判断里面x=%d\n",x);
      fun(x/2);
    }
      
    
    printf("%d\n", x);
}
int main()
{
    fun(7);
}

运行结果

img

下面是我的理解,供参考:
首先,main函数执行fun(7), 进入函数,判断7/2=3大于1,然后调用fun(7/2)即fun(3);
然后,进入fun(3),判断3/2=1,所以不往下调用fun函数了,执行打印语句,打印x,即3;
接着,返回fun(3)的上一个调用函数fun(7),执行打印语句,打印x,即7.
所以合起来就是打印:37.

#include <stdio.h> 
void fun(int x)
{
    if (x/2 > 1) {
        printf("x=%d,%d/2=%d,开始进入fun(%d/2).\n",x,x,x/2,x);
        fun(x/2);
    }
        
    printf("%d", x);
}
int main()
{
fun(7);
}

img