2012-10-06 41 views
0

我似乎無法理解如何實現此功能。原型是如下:對函數的第n次調用

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

什麼它應該做的是拿一張地圖,米,從該地圖從K開始返回的第n個關鍵。所以,如果n是3,那麼你返回m.get(m.get(m.get(k)))。

我有一種感覺,我必須使用遞歸調用nthGet從n返回鍵的最終值,但我不太確定。

+0

艱難的一..但它可能有助於使用記憶變量名 – Coffee

回答

4

你可以簡單的循環n次:

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

如果值沒有出現在地圖上的一個關鍵,這可能返回null。

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)); 
} 
相關問題