2012-11-04 120 views
1

足够简单,我试图定义一个递归方法来返回一个向量的媒介。然而,我的代码没有工作,编译器没有任何抱怨,但程序只是在函数被调用时才终止。我试图一遍又一遍地查看代码。任何帮助将不胜感激:dC++简单但棘手的递归

int minR(vector<int> vec, size_t start){ 
    if(start == vec.size()-1){return vec[start];} 
    int temp = minR(vec, start++); 
    return ((vec[start] < temp) ? vec[start] : temp); 
} 
+0

调试器说什么? –

+2

它是中等或中位数 – Anirudha

+0

我没有调用调试器,我会尝试做现在,谢谢你的建议 – PiD

回答

2

在这一行

int temp = minR(vec, start++); 

要调用minR(vec, start),当你认为你不是minR(vec, start+1)。这会导致无限递归,这就是程序停止的原因。

你应该叫

int temp = minR(vec, start + 1); 
+0

哇,令人难以置信,我太棒了,我在整个晚上尝试了不同的实现,并且都没有工作。我认为他们是一样的。先生非常感谢您。 – PiD

+0

@NguyenHaiChau不客气:) – alestanis

+2

当你意识到女人的那一刻 – user1534664

2
int temp = minR(vec, start++); 

应该是这样的:

int temp = minR(vec, start + 1); 

后缀++增加值和“收益”以前的值,基本上是调用与功能相同的值为start

+0

非常感谢 – PiD