2014-03-29 20 views
1
int getElement(stack<int> s,int i){ 
if(i>1){ 
    s.pop(); 
    getElement(s,i-1); 
    } 
else 
    return s.top(); 
} 

int main(){ 
    stack<int> pancakes; 
    pancakes.push(1); 
    pancakes.push(2); 
    pancakes.push(3); 
    printf("%d",getElement(pancakes,2)); 


} 

幫助!我的getElement函數返回i處的元素,其中我從堆棧的頂部值開始,值爲1.堆棧函數應該返回指定的元素,而不是返回垃圾值

當我運行getElement(2)時,它應該在堆棧上返回2: 3 - index 1, 2-索引2和 1-索引3

它打印垃圾值。假設它只接受可接受的值(索引在邊界內),錯誤處理是我稍後要做的事情。

+1

仔細閱讀你的功能,並告訴我這是什麼回報,如果'i'不等於1 –

+0

這並不編譯。 –

回答

3

您缺少return聲明。

變化

int getElement(stack<int> s,int i){ 
if(i!=1){ 
    s.pop(); 
    getElement(s,i-1); 
    } 
else 
    return s.top(); 
} 

int getElement(stack<int> s,int i){ 
if(i!=1){ 
    s.pop(); 
    return getElement(s,i-1); // The line with the missing return. 
    } 
else 
    return s.top(); 
} 
+0

編譯器警告的確切原因。 – chris

+0

非常感謝!我一直在遠離C++,因爲現在我忘記了遞歸如何工作T_T。再次感謝! –

+1

@NolanDeogracias如果你是像Scheme這樣的語言,最後一個表達式的值是返回值,那麼在C/C++中製作一個簡單的錯誤是很容易的。 –