По ходу выполнения программы возникает исключение "Необработанное исключение по адресу 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;
}
Это медленно убывающая последовательность. Замените рекурсию на цикл.
Память, выделенная на стек, ограничена. Так как последовательность убывает медленно, требуется большое количество вложенных вызовов функции sinus. Каждый вызов использует дополнительный кусочек стека. В какой-то момент место в стеке заканчивается.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники