Я изучаю это возведение в степень Рекурсивный алгоритм, он работает хорошо. Но я не понимаю, почему это работает? Потому что я ожидаю, что всегда возвращает 1,1,1 ... если n
даже потому, что a не умножается на return
.
Когда я пытаюсь recPower(3,2)
и печати шаг за шагом фактор, это будет так:Экспоненциальный рекурсивный
Но почему 3 выйдет?
def recPower(a, n):
# raises a to the int power n
if n == 0:
return 1
else:
factor = recPower(a, n//2)
if n%2 == 0: # n is even
return factor * factor
else: # n is odd
return factor * factor * a
3 существует потому, что 1 * 1 * 3 == 3 – shuttle87
Ваш алгоритм реализует именно это: 'a ** (2 * n) = (a ** n) * (a ** n)', 'a ** (2 * n + 1) = (a ** n) * (a ** n) * a'. Что именно вы не понимаете по этому поводу? – Julien
«потому что a не умножается в обратном». В зависимости от того, что вы точно подразумеваете под этим, я бы сказал, что он делает в нижнем возврате: коэффициент коэффициента возврата * a'. – Evert