2012-10-06 4 views
0

이 함수를 구현하는 방법을 이해할 수없는 것 같습니다. 프로토 타입은 다음과 같습니다 : 어떻게해야 무슨함수에 대한 n 번째 호출

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)))을 반환합니다.

나는 키의 최종 값을 n에서 반환하기 위해 nthGet에 대한 재귀 호출을 사용해야한다는 느낌이 들지만 확실히는 모르겠다.

+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)); 
}