감사.
하여 다른 사람이 그런 일 같아야합니다
else
temp = s.pop();
retVal = getNth(s, n);
s.push(temp);
return retVal;
(*)가 temp
및 retVal
를 선언하지 용서해 [그 이외의, 그것은 괜찮 은데,이에서 일반적인 생각을 이해할 수있다 ..
편집 : 나는, 무슨 일이 일어나고 있는지 간단한 예제를 추가하려면 스택을 가정하기로 결정
는
,691,363입니다 (210)
|1|
|2|
|3|
|4|
---
당신은 getNth (들, 3)을 호출 할 수 있습니다 :이 첫번째 팝업()와 getNth() 후 스택
에 무슨 일이 일어날 것입니다 : 조건에 도달하지 않은 중지, 그래서 계속]
|2|
|3|
|4|
---
2 팝업(), getNth() : 지금
|3|
|4|
---
[다시, 계속] s.top() == n을, 당신은 그들이 실현 경우 확인! 그래서 너는 n을 반환한다. 다시 재귀 오는 경우
는 s.push(temp)
호출 및 temp==2
, 그래서 우리는 얻을 수있다 :
|2|
|3|
|4|
---
우리가 재귀에서 이제 다시, 다시 RETVAL을 반환, 우리는 다시 s.push()
를 사용하고 우리가 얻을 :
|1|
|2|
|3|
|4|
---
원본 스택! 재귀에 의해 반환 된 동일한 returnVal을 반환합니다.
참고 :이 당신의 질문이 아니라 함수의 이름은 당신이 찾고 있던 값을 반환하지 않는 것을 의미하지만, 스택 오히려 번째 요소, 의미, 당신의 스택 경우 입니다 :
|5|
|8|
|8|
|8|
|2|
|4|
---
getNth(2)
귀하의 질문에 설명으로, 8, NOT 2를 반환해야합니다.
하지만 그 사실을 확실히 알 수는 없지만 문제가 너무 많지 않으면이 질문을 처리 할 수있는 도구가 충분하다고 생각합니다!
행운을 빈다! EDIT 2
: 코멘트에 토론 후
, 영업 이익은 원래의 질문이 무엇을 설명 후, 조금 다른 것을, 그래서 때문에 여분의 편집 싶었던 것이 분명하다 :
당신의 솔루션은 요소를 검색하고 그것을 반환합니다. 아마도 여러분이하고 싶은 것은이 요소가 반환 될 때까지 반환해야합니다. [다시 말하면 모든 변수를 선언하지 않고 컴파일하지 않고 단지 방향 일뿐입니다] :
template <class Type>
Type getNth(stack(Type) & s, int n)
{
if(s.empty()) {return -1; } //note that in C++ throwing an exception here will be more wise, since -1 might be not matching to Type
else if(n == 0) { return s.top(); }
else {
temp = s.pop();
retVal = getNth(s, n-1);
s.push(temp);
return retVal;
}
}
+1 사람들이 당신을 위해 숙제를하고 싶지 않다는 이유로 +1 : –
질문과 관련이 없으므로 답변에 추가하지 않았지만 마지막 if 문에 불완전한 코드가 있다고 생각합니다. s.empty() == true 인 경우 첫 번째 if가 액세스되고 -1이 반환되므로 입력하지 마십시오. – amit
스택을 도우미 데이터 구조로 사용할 수 없다면 다음과 같이 재귀를 사용할 수 없습니다. –