У меня есть рекурсивная функция, которая не работает так, как я хочу.Внутри функции у меня есть переменная sum.Я хочу, чтобы переменная была локальной / другой для каждого вызова функции, чтобы итоговая сумма стала суммой всех предыдущих вызовов функций.Однако кажется, что переменная действует глобально, поэтому каждый раз, когда вызывается функция, переменная суммы устанавливается в 0, и это то, что возвращается в конце.У меня та же проблема со списком: для каждого вызова функции элемент удаляется из my_list во всех различных рекурсивных фреймах, а не только в локальный фрейм, как я хочу.Это то, как переменные должны работать во время рекурсии в Python?Если это так, как я могу изменить код, чтобы он работал так, как я хочу?
Кстати, цель функции - выяснить, существует ли подмножество списка, который добавляетдо числа n, но это не очень важно для понимания проблемы, с которой я столкнулся.
Я искал похожие посты и нашел кого-то, кто утверждал, что вы не вызываете рекурсию, если не используете returnоператор для возврата функции следующим образом:
return f (n - x, remove (list, x))
Однако, если это так, я не вижу, как я могуоба возвращают функцию и одновременно добавляют значение к сумме.
list1 = [3, 5, 1, 2, 5, 3, 4]
# removes an element from the list, and returns the result
def remove(list_, x):
list_.remove(x)
return list_
# recursive function
# should return 1 or more if there exists a combination of numbers in the list
# that add up to the number n
def f(n, my_list):
sum = 0
if n == 0:
return 1
if len(my_list) == 0:
return 0
for x in my_list:
sum += f(n - x, remove(my_list, x))
return sum
print(f(15, list1))
Существует подмножество списка, которое добавляет до 15: например (5, 1, 5, 4),поэтому вывод должен быть не менее 1, но из-за того, что переменные действуют глобально, выход всегда равен 0.