第n个调用函数

时间:2012-10-06 17:36:02

标签: java recursion map

我似乎无法理解如何实现此功能。原型如下:

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返回键的最终值,但我不太确定。

2 个答案:

答案 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));
}