Stack overflow в рекурсивной функции

92
30 августа 2021, 08:50

По ходу выполнения программы возникает исключение "Необработанное исключение по адресу 0x79E917D7 (ucrtbased.dll) в ConsoleApplication7.exe: 0xC00000FD: Stack overflow (параметры: 0x00000001, 0x008A2FB8)."Вопрос с виду довольно тупой, но не могу додуматься.

    // Для заданного числа x распечатать числовую последовательность:
//sin(x), sin(sin(x)), sin(sin(sin(x))), …
//Вычисления прекратить, когда очередной элемент последовательности станет по
//модулю меньше, чем 10^-2 .

#include <iostream>
using namespace std;
float sinus(float x);

int main()
{
    setlocale(LC_ALL, "rus");
    float x;
    cout << "Введите x >> ";
    while (!(cin >> x) || (cin.peek() != '\n'))//Цикл который очищает оставшиеся символы в потоке
    {
        cin.clear();//сброс битов ошибок входного стандартного потока
        while (cin.get() != '\n');
        cout << "Неправильний ввід, будь ласка, повторіть ввід спочатку : " << endl;
    }
    sinus(x);
}
float sinus(float x) {
    float result;
    result = sin(x);
    cout << result << endl;
    if (abs(result) > 0.01) {
        sinus(result);
    }
    return result;
}
Answer 1

Это медленно убывающая последовательность. Замените рекурсию на цикл.

Память, выделенная на стек, ограничена. Так как последовательность убывает медленно, требуется большое количество вложенных вызовов функции sinus. Каждый вызов использует дополнительный кусочек стека. В какой-то момент место в стеке заканчивается.

READ ALSO
Возникли проблемы при вычислении суммы бесконечного ряда

Возникли проблемы при вычислении суммы бесконечного ряда

Написал код, согласно требованиям (задание приложу в скриншоте)Все вычисляет,ошибок не выдает, однако значение проверки суммы ряда отличается...

117
Как добавить программу в автозагрузку используя WinAPI (C/C++)

Как добавить программу в автозагрузку используя WinAPI (C/C++)

Какая функция, описание которой находится в заголовочном файле windowsh (насколько я знаю, она там), отвечает за автозапуск и как прописать, заранее...

129
как поставить картинке position: sticky;?

как поставить картинке position: sticky;?

Есть код, и надо к картинкам добавить position: sticky;, возможно ли это сделать? У меня лично не получается

130
Как правильно реализовать Lazy-loading для &lt;picture /&gt;

Как правильно реализовать Lazy-loading для <picture />

Использую тэг <picture /> для реализации fallback-механизма для WebP-изображений:

90