Возведение в степень
Вы решили задачу. Теперь можно сравнить подходы.
Следуем рекуррентной формуле и останавливаемся при нулевом показателе.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Прямая рекурсия
Каждый вызов уменьшает показатель на единицу; при возврате выполняется умножение.
def power(a, n):
if n == 0:
return 1
return a * power(a, n - 1)
print(power(float(input()), int(input())))
Время: O(n). Память: O(n) стек.
Другой способ: Рекурсия с накопителем
Произведение переносится в аргумент следующего вызова. Циклов и операции степени нет; Python не устраняет хвостовые вызовы.
def power(a, n):
def multiply(k, product):
if k == 0:
return product
return multiply(k - 1, product * a)
return multiply(n, 1)
print(power(float(input()), int(input())))
Время: O(n). Память: O(n) стек.
На что обратить внимание
- Для больших n оба варианта достигают предела глубины рекурсии Python; n=0 возвращает 1.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.