0

この関数を実装する方法を理解できないようです。プロトタイプは以下です。

public static <K> K nthGet (Map<K,K> m, K k, int n);

これがすべきことは、マップ m を取得し、そのマップから k から始まる n 番目のキーを返すことです。したがって、n が 3 の場合、m.get(m.get(m.get(k))) を返します。

n からキーの最終値を返すには、nthGet への再帰呼び出しを使用する必要があると感じていますが、よくわかりません。

4

2 に答える 2

4

n回ループするだけです:

for (int i = 0; i < n; i++) {
    k = m.get(k);
}
return k;

値がキーとしてマップに存在しない場合、null が返されることがあります。

于 2012-10-06T17:38:47.440 に答える
0

再帰を使用する場合は、最初に基本ケースを検討し、次に帰納的ケースを検討する必要があります。

ここでの基本ケースはですn=0。これは簡単です。マップを検索する必要がないので、return k

m.get(nthGet(m, k, n-1))帰納的なケースは、呼び出しごとに1つのルックアップを実行するため、戻るだけです。

したがって、コードは非常に単純です。

K nthGet (Map<K,K> m, K k, int n) {
    if(n == 0) return k;
    return m.get(nthGet(m, k, n-1));
}
于 2012-10-06T17:41:20.920 に答える