Почему моя реализация рекурсивной POW (x, n) вызывает переполнение стека для большого N? [дублировать]C++

Программы на C++. Форум разработчиков
Anonymous
Почему моя реализация рекурсивной POW (x, n) вызывает переполнение стека для большого N? [дублировать]

Сообщение Anonymous »

Я пытаюсь реализовать функцию рекурсивной мощности в C ++, но она не удается с большим N из -за переполнения стека. Вот код: < /p>

Код: Выделить всё

class Solution {
public:
double myPow(double x, int n) {
long long exp = n;
if (exp < 0) {
x = 1 / x;
exp = -exp;
}
return pow(x, exp);
}

double pow(double x, long long n) {
if (n == 0) return 1;
return x * pow(x, n - 1); // Recursive call
}
};
< /code>
Это хорошо работает для небольших значений n, но когда я запускаю его для больших значений, таких как < /p>
myPow(2.0, 1000000000)
, я получаю ошибку переполнения стека. /> То, что я попробовал: < /p>
Я попытался использовать длинный длинный, чтобы избежать целочисленного переполнения. < /p>
Я подозреваю, что слишком много рекурсивных вызовов могут быть проблемой.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -for-large

Вернуться в «C++»