我似乎無法理解如何實現此功能。原型是如下:對函數的第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返回鍵的最終值,但我不太確定。
我似乎無法理解如何實現此功能。原型是如下:對函數的第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返回鍵的最終值,但我不太確定。
你可以簡單的循環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));
}
艱難的一..但它可能有助於使用記憶變量名 – Coffee