C ++ - Ошибка при создании пирамиды с рекурсивной функцией - PullRequest
0 голосов
/ 28 марта 2012

Итак, я пытался выяснить, почему это не работает.В основном я пытался написать рекурсивную функцию, которая будет отображать красивую текстовую пирамиду в консоли.

Сначала пользователи вводят высоту, а затем символ, используемый для создания пирамиды, и здесь вызывается функция:

//_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;
}

Выдается следующая ошибка: необработанное исключение в 0x00c823e9 в Kevin_CIS121.exe: 0xC00000FD: переполнение стека, как только оно добирается до первогоcout of for.

Я действительно не уверен в этом моменте ...

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Простой: вы никогда не попали в базовый случай.У вас бесконечная рекурсия, потому что _height-- оценивается после каждой итерации цикла for, а не до.Рассмотрим pyramidLine (_height-1, _width);.

0 голосов
/ 28 марта 2012

Все, что вы можете делать рекурсивно, вы можете делать и итеративно. Повторение не приведет к переполнению стека, как это может случиться с рекурсией. Попробуйте переписать его, используя итерацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...