По ходу выполнения программы возникает исключение "Необработанное исключение по адресу 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. Каждый вызов использует дополнительный кусочек стека. В какой-то момент место в стеке заканчивается.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей