你应该存储pop()
ED值,递归调用的结果,并push()
的pop()
ED值回,才返回。
你别的看起来应该是这样的:除了那个以外,它看起来精]
else
temp = s.pop();
retVal = getNth(s, n);
s.push(temp);
return retVal;
(*),原谅我没有报关temp
和retVal
,您可以了解从这个总体思路..
编辑:
我决定增加一个简单的例子发生了什么,假设你的堆栈
|1|
|2|
|3|
|4|
---
,你叫getNth(S,3):这会发生什么事第一个pop()方法和getNth()之后的堆栈
:停止没有达到条件,所以一直走下去]
|2|
|3|
|4|
---
第二pop()方法,getNth():再次,继续前进]
|3|
|4|
---
现在
,当你检查是否s.top()== N,你知道他们是!所以你回来n。
来从递归回来的时候,s.push(temp)
被调用,temp==2
,所以我们得到:
|2|
|3|
|4|
---
,我们从递归再次返回retVal的,现在回来了,我们再次使用s.push()
,我们得到:
|1|
|2|
|3|
|4|
---
原来的堆栈!并返回递归返回的相同returnVal!
注:这不是你的问题,但该功能的名称所暗示的,你不想回到你正在寻找的价值,而是在堆栈中的第n个元素,这意味着,如果你的筹码是:
|5|
|8|
|8|
|8|
|2|
|4|
---
getNth(2)
需要返回8,而不是2,因为你的问题描述。
但是我不太可能知道,如果是这样的话,我认为你有足够的工具来处理这个问题,没有太多问题!
祝你好运!
编辑2:
在评论中讨论后,很明显的是,OP想要的东西有点不同,那么原来的问题描述了,等于是额外编辑:
你解决方案是搜索一个元素并返回它,可能你想要做的是COUNT,直到这些元素,然后返回,应该是这样的[再次,不声明所有变量,它不会编译,它只是一个方向] :
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不希望人们为你做功课:) –
它与问题无关,所以我没有将它添加到答案中,但我认为你在最后一条if语句中有死代码,你可以永远不要输入它,因为如果s.empty()== true,那么第一个if将被访问并返回-1。 – amit
如果你不能使用堆栈作为帮助器数据结构,那么你不能使用递归:) –