なんも考えずに再帰呼び出しで書いたらいきなり動いたけど、
どういう仕組みが働いてちゃんと動いてるんだろう