2012-03-27 3 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--은 루프의 각 반복 이후에 회 이후에 으로 계산되기 때문에 무한 재귀가 발생합니다. pyramidLine (_height-1, _width);을 고려하십시오.

0

재귀 적으로 할 수있는 모든 작업을 반복적으로 수행 할 수 있습니다. 반복하면 재귀와 같은 스택 오버 플로우가 발생하지 않을 수 있습니다. 반복을 사용하여 다시 작성하십시오.

+0

필자의 교수는 피라미드 생성에 사용 된 함수가 재귀 적이어야 함을 언급했다. – DatapawWolf

관련 문제