請記得一個函式執行完畢之後一定會回來繼續執行下一行,所以每次invert執行完畢之後,一定會繼續往下走到printf,就這樣並不是執行了新的invert之後就不管三七二十一把之前的context取代掉,要這樣的效果可以,但不是初學者會接觸到的內容行,另外我覺得應該把遞迴當成是function call func的一種特例,如果有 code unrolling (展開) 的概念會更清楚,像這張圖
https://imgur.com/28K5WPM如果按照這張圖的方法把所有的invert展開,應該就一目了然了!你就想function只不過就是把一段code壓縮起來,像zip檔那樣子,要執行到的時候再展開BTW,我覺得這種寫法蠻有創意的,但以這個問題來說這絕對不是好解法