Код:
#include <iostream>
using namespace std;
double power(double a, int n) {
if (n == 0) {
return 1;
}
if (n % 2 == 0) {
return power(a * a, n / 2);
}
else {
return a * power(a, n - 1);
}
}
int main() {
double a;
int n;
cin >> a >> n;
cout << power(a, n);
return 0;
}
Что происходит текстом
Начало работы программы.
Вводится действительное число a и целое неотрицательное число n.
Далее вызывается рекурсивная функция возведения в степень.
Если степень n равна 0, функция возвращает 1, потому что любое число в нулевой степени равно 1.
Если степень n чётная, число a умножается само на себя, а степень уменьшается в 2 раза.
То есть вместо долгого умножения используется выражение:
a^n = (a * a)^(n / 2)
Если степень n нечётная, число a умножается на результат возведения в степень n - 1:
a^n = a * a^(n - 1)
Функция вызывает сама себя до тех пор, пока степень не станет равна 0.
После завершения всех рекурсивных вызовов программа получает ответ и выводит его на экран.
Конец работы программы.