末尾再帰最適化を実装