再帰処理はなかなかどこまで進んだのかわかりにくいので、書いた方がいいです。
A=[1,2,3]
B=[1,2,3]
C=[1,2,3]
が初期状態。スタックなので後ろ(右)からしか取り出せませんし(pop)、後ろにしか追加できません(push)。
fの実行です。
最初はAは空ではありませんので4行目に進みますね。
5行目、AからpopしてCに入れるので、A=[1,2]、C=[1,2,3,3]となります。
6行目、この関数がまた呼び出されています。わかりにくいのでf2としましょうか。
f2関数の実行
同様にAからpopしてCに入れるので、A=[1]、C=[1,2,3,3,2]となります。
またf関数を呼び出しています。わかりにくのでf3としましょうか。
f3の実行
同様にA=[]、C=[1,2,3,3,2,1]となり、またfを呼び出しているのでf4とします。
f4の実行
Aは空になったので何もせず終了します。f3の7行目に移ります。
f3の7行目ではCからpopしてBにpushとのことなのでC=[1,2,3,3,2]、B=[1,2,3,1]となります。
f3が終了しf2の7行目に移ります。
f2の7行目では同様にC=[1,2,3,3]、B=[1,2,3,1,2]となります。
f2が終了しf1の7行目に移ります。
f1の7行目では同様に、c=[1,2,3]、B=[1,2,3,1,2,3]となります。