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)))。

我有一种感觉,我必须使用对 nthGet 的递归调用来从 n 返回键的最终值,但我不太确定。

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)),因为我们每次调用都进行一次查找。

因此,代码非常简单:

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 回答