2012-03-27 74 views
0

所以我一直在試圖弄清楚爲什麼這不起作用。基本上我試圖寫一個遞歸函數,它將在控制檯中顯示一個不錯的文本金字塔。C++ - 使用遞歸函數創建金字塔的錯誤

用戶首先進入的高度,然後用符號來創建金字塔,並且該功能在這裏稱爲:

//_pyramidHeight is 10 
//The second int is to specify the beginning width, which should be the point at the top.  
pyramidLine(_pyramidHeight, 1); 

我創建的功能是在這裏:

void pyramidLine (int _height, int _width) 
{ 
    for (; _height > 0; _height--, _width + 2) 
    { 
     cout << setfill (' ') << setw(_height - 1); 
     cout << setfill (_pyramidBase) << setw(_width); 

     pyramidLine (_height, _width); 
    } 

    return; 
} 

錯誤給定是這樣的:在Kevin_CIS121.exe 0x00c823e9未處理的異常:0xC00000FD:堆棧溢出 只要它到達for循環的第一個cout。

我真的不知道在這一點上...

回答

2

簡單:你從來沒有打基礎的情況下。你有無限遞歸,因爲_height--評估您的for循環的每個迭代之後,而不是之前。考慮pyramidLine (_height-1, _width);

0

任何你可以遞歸地做的事情,你也可以做迭代。迭代不會像遞歸那樣導致堆棧溢出。嘗試使用迭代重新編寫它。

+0

我忘了提,但我的教授說它用於金字塔創建的函數必須是遞歸的。 – DatapawWolf 2012-03-28 00:34:04