return语句 这个是怎么一步步得到最终结果的啊


#include 
 
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // 隐含return;
 
int fb(int i)
{
    if (i > 4)
       return 4;
    printf("fb():   %d\n", i);
    return 2;
}
 
int main(void)
{
    fa(2);
    fa(1);
    int i = fb(5);  
    i = fb(i);       
    printf("main(): %d\n", i);
}

这个是怎么运行的啊,这个运行结果是怎么一步步出来的 555

程序从main函数开始,进去main函数后,先执行fa(2),进去fa函数,由于i==2,直接return返回。接着执行fa(1),此时i等于1不等于2所以执行printf语句。然后执行fb(5),由于5大于4,所以直接返回4。然后执行fb(i),其中i等于4,即执行fb(4)。然后在fb函数中执行printf语句,最后再执行main函数中的printf语句

不应该是 1 4 2?