#python #function #recursion
#питон #функция #рекурсия #python
Вопрос:
Это общая проблема, с которой я продолжаю сталкиваться. Поскольку я чувствую, что этот вопрос лучше всего задать на примере, я создал функцию, чтобы проиллюстрировать общую проблему, с которой я столкнулся.
def function(a):
b=56
if a>0:
b=b 2
a=a-1
return function(a)
else:
print(b)
Здесь я пытаюсь установить начальное значение для b
, которое будет меняться в зависимости от a
. Например, если a=1
я хотел бы, чтобы функция возвращала 58
, но она действительно возвращает 56
. Я понимаю, что всякий раз, когда функция выполняет обратный цикл, она сбрасывается b
как 56
, поэтому функция всегда будет возвращаться, 56
независимо от того, что a
есть. Мне было интересно, как я мог бы установить начальное значение как 56
без его сброса каждый раз.
Я надеюсь, что в этом есть смысл! Спасибо за помощь!
Ответ №1:
Отредактировано: В зависимости от вашего варианта использования, if b
также может быть параметром состояния рекурсии. Поскольку b
необходимо определить с помощью a
, мы можем установить начальное значение b
, когда b is None
def func(a, b=None):
if b is None:
# b is not set, determine `b` now depending on `a`
b = 56 # fill-in other cases here
if a > 0:
b = 2
a -= 1
return func(a, b)
else:
return b
func(1)
Ответ №2:
Типичный подход к выполнению такого рода действий заключается в том, чтобы ваша рекурсивная функция принимала «аккумулятор» ( b
здесь) в качестве дополнительного параметра. Тогда ваша фактическая функция просто вызывает ее с желаемым начальным значением, здесь 56.
Для вашего примера это было бы:
def recursive(a, b):
if a>0:
b=b 2
a=a-1
return recursive(a, b)
else:
print(b)
def function(a):
return recursive(a, 56)
Обратите внимание, что вы могли бы упростить, recursive
используя if
оператор return recursive(a - 1, b 2)
. И вы, вероятно, хотите return b
, а не просто print
это.