Мини-урок · перед практикой

Отрицательная степень

Отрицательный показатель заменяем обратным основанием.

Как к ней подойти

Потренируйтесь выделять повторяющуюся логику в функцию и находить условие остановки рекурсии.

Коротко о теме

Функция получает аргументы и возвращает результат через 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).