我似乎无法理解如何实现此功能。原型如下:
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返回键的最终值,但我不太确定。
答案 0 :(得分:4)
你可以简单地循环n次:
for (int i = 0; i < n; i++) {
k = m.get(k);
}
return k;
如果地图中没有值作为键,则可能返回null。
答案 1 :(得分: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));
}