我似乎无法理解如何实现此功能。原型如下:
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 返回键的最终值,但我不太确定。
您可以简单地循环 n 次:
for (int i = 0; i < n; i++) {
k = m.get(k);
}
return k;
如果映射中不存在一个值作为键,这可能会返回 null。
如果要使用递归,则应首先考虑基本情况,然后考虑归纳情况。
这里的基本情况是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));
}