インターフェースを定義
単純な再帰呼び出し版を比較のために実装