プログラムの再帰は必ずループに置き換えて
データ構造のみスタックにして対処しています