В данном случае происходит примерно следующее:
x=1
print(1) <- if ветка и рекурсия
x=2
print(2) <- if ветка и рекурсия
x=3
print(3) <- if ветка и рекурсия
x=4
print(4) <- мимо if - работает вторая часть функции
print(3)
print(2)
print(1)
Т.е., сначала в функции отрабатывает ветвь за if три раза, а потом вторая ветвь четыре раза в обратном порядке.
Если заменить рекурсию на саму функцию, то в данном случае получится следующий код (упрощенно):
def func(x1): # функция #1
if x1 < 4:
print(x1) # 1
x2 = x1 + 1 # функция #2
if x2 < 4:
print(x2) # 2
x3 = x2 + 1 # функция #3
if x3 < 4:
print(x3) # 3
x4 = x3 + 1 # функция #4
print(x4) # 4
print(x3) # 3, функция #3 - конец
print(x2) # 2, функция #2 - конец
print(x1) # 1, функция #1 - конец