再帰を用いないバージョンを実装