Пытаясь выполнить следующую задачу:
for element in list:
if condition is true:
remove element from list
start the for loop again with element removed list
Чтобы добиться этого, я пытался, как,
def func(list, p1, p2):
for element in list:
if condition is true:
new_list = remove element from list
func(new_list, p1, p2)
#Here p1, p2 are used in condition.
Я получаю сообщение об ошибке, поскольку максимальная глубина рекурсии превышена.
Обновлен полный код:
def winner(array, current_player, a, b):
bob = alice = 0
def winner_recursive(array, current_player, a, b):
nonlocal bob, alice
for cn in array:
if cn % current_player == 0:
array.remove(cn)
if current_player == a:
bob += 1
current_player = b
else:
alice += 1
current_player = a
return winner_recursive(array, current_player, a, b)
winner_recursive(array, current_player, a, b)
if bob > alice:
return 'BOB'
elif bob < alice:
return 'ALICE'
else:
if current_player == a:
return 'ALICE'
else:
return 'BOB'
t = int(input())
for _ in range(t):
N, a, b = map(int, input().split())
arr = list(map(int, input().split()))
cp = a
arr.sort(reverse=True)
print(winner(arr, cp, a, b))
ввод вышеуказанного кода
2
5 3 2
1 2 3 4 5
5 2 4
1 2 3 4 5
Ожидаемый результат:
ALICE
BOB
Может ли кто-нибудь помочь мне достичь этого с помощью рекурсии или какой лучший питонический способ выполнить эту задачу?
Примечание: Другие подобные SO вопросы, касающиеся диапазона номеров. Здесь я пытаюсь со списком в цикле.