Как рекурсия в GenerateParenthesis переходит от возврата (3, 3) к возврату (2, 1)?Python

Программы на Python
Anonymous
 Как рекурсия в GenerateParenthesis переходит от возврата (3, 3) к возврату (2, 1)?

Сообщение Anonymous »

Я работаю над задачей LeetCode 22. Создание круглых скобок с использованием рекурсивного подхода с возвратом в Python. Функция работает, но мне трудно понять ход рекурсии, в частности, как она переходит от backtrack(3, 3) к backtrack(2, 1).

Код: Выделить всё

def generateParenthesis(self, n: int) -> List[str]:
def backtrack(open_count, close_count, curr, res):
print(f"backtrack({open_count}, {close_count}, {curr})")
if open_count < n:
backtrack(open_count + 1, close_count, curr + "(", res)

if close_count < open_count:
backtrack(open_count, close_count + 1, curr + ")", res)

if len(curr) / 2 == n:
res.append(curr)
return

res = []
backtrack(0, 0, "", res)
return res

Вывод отладки для n = 3:

Вот результат, который я получаю при запускеgenerateParenthesis(3):

Код: Выделить всё

backtrack(0, 0, )
backtrack(1, 0, (
backtrack(2, 0, ((
backtrack(3, 0, (((
backtrack(3, 1, ((()
backtrack(3, 2, ((())
backtrack(3, 3, ((()))
backtrack(2, 1, (()
Мой вопрос:
Как происходит переход вывода от возврата (3, 3) к возврату (2, 1)?
Я вижу, что после достижения возврата (3, 3) функция возвращается к возврату (3, 2), а затем возвращается к возврату (2, 1), но мне трудно понять, как функция возвращается назад и что вызывает этот переход.
Может ли кто-нибудь объяснить этот переход в стеке рекурсии и роль возврата в этом случае?

Подробнее здесь: https://stackoverflow.com/questions/798 ... to-backtra

Вернуться в «Python»