Мини-урок · перед практикой
Отрицательная степень
Отрицательный показатель заменяем обратным основанием.
Как к ней подойти
Потренируйтесь выделять повторяющуюся логику в функцию и находить условие остановки рекурсии.
Коротко о теме
Функция получает аргументы и возвращает результат через return. Рекурсия разбивает задачу на меньшую такую же задачу; без базового случая вызовы не остановятся. Проверьте, что каждый шаг действительно приближает к нему.
Ключевая идея · Быстрое возведение
Двоичная запись показателя позволяет за шаг уменьшить показатель вдвое.
Проверьте перед запуском
- При n=0 ответ 1; при очень больших показателях float может переполниться.
После практики
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Быстрое возведение
Двоичная запись показателя позволяет за шаг уменьшить показатель вдвое.
def power(a, n):
if n < 0:
a, n = 1 / a, -n
result = 1.0
while n:
if n % 2:
result *= a
a *= a
n //= 2
return result
print(power(float(input()), int(input())))
Время: O(log(|n|+1)). Память: O(1).
Другой способ: Повторное умножение
Сначала вычисляем положительную степень, затем при необходимости берём обратную.
def power(a, n):
result = 1.0
for _ in range(abs(n)):
result *= a
return 1 / result if n < 0 else result
print(power(float(input()), int(input())))
Время: O(|n|). Память: O(1).