У меня есть два рекурсивных утверждения, которые делают то же самое, я понимаю, как работает первый, но я запутался во втором случае.Как работает эта рекурсивная инструкция?
1)
def recurPower(base, exp):
'''
base: int or float.
exp: int >= 0
returns: int or float, base^exp
'''
# Base case is when exp = 0
if exp <= 0:
return 1
# Otherwise, exp must be > 0, so return
# base* base^(exp-1). This is the recursive case.
return base * recurPower(base, exp - 1)
это первый случай, хотя он отзывает себя она по-прежнему оставляет переменную «основание» за умножать каждый раз, когда вокруг метода.
2)
def recurPowerNew(base, exp):
'''
base: int or float.
exp: int >= 0
returns: int or float; base^exp
'''
# Base case is when exp = 0
if exp <= 0:
return 1
# Recursive case 1: exp > 0 and even
elif exp % 2 == 0:
return recurPowerNew(base*base, exp/2)
# Otherwise, exp must be > 0 and odd, so use the second
# recursive case.
return base * recurPowerNew(base, exp - 1)
В этом случае я не понимаю, как это работает, если это даже число, то нет переменной, как и в первом случае, в настоящее время действовал на, когда число даже кажется, что оно просто постоянно дает разные параметры, но ни в коем случае не затрагивает какую-либо конкретную переменную, такую как «база».
do параметры возвращают значение, если в методе нет тела?
'делать параметры возвращать значение, если в методе нет тела?" параметры не возвращают значения, функции возвращают –
Каждое возвращение рекурсивной функции выставляет стек кадров , и что восстановление кадра содержит «база». –
@ElliottFrisch жаль, что я до сих пор не совсем понимаю, эта часть метода не содержит базового elif exp% 2 == 0: return recurPowerNew (base * base, exp/2) мне кажется, что это просто меняет параметры каждый раз. – gencode