Учитывая следующее дерево:
# 'Mobs'
# / | \
# 'NPC' 'Enemies' 'Heroes'
# / / | \ \
# 'Andrew' 'Slime' 'Goblin' 'Dragon' 'Human'
# \
# 'Wyrm'
tree = ('Mobs', [('NPC', [('Andew', [])]), ('Enemies', [('Slime', []), ('Goblin', []), ('Dragon', [('Wyrm', [])])]), ('Heroes', [('Human', [])])])
Каждый узел представляет собой кортеж, состоящий из строки в [0] и списка возможных дочерних элементов в [1]. Следующая функция успешно возвращает счет:
def how_many(node):
count = 1
for i in node[1]:
count = count + how_many(i)
return count
Я пытаюсь понять, что именно он делает. Кто-то объяснил мне, что мне нужно представить себе «стеки», чтобы понять, как работает рекурсия. Позвольте мне попытаться сформулировать то, что я понял: поскольку программа не имеет всей информации на момент первого вызова, она достаточно мощна, чтобы поставить все операции на удержание, сложить их так, чтобы они были в порядке выполняется, сохраняется, продолжается до тех пор, пока не достигнет базового случая - который находится в нашей функции, когда у узла дерева нет дочерних элементов - и выдает правильное накопленное значение в нашей переменной count, чтобы он мог вернуть его, когда l oop завершено.
Я прав? Мне нужно, чтобы кто-то объяснил словами, что функция делает шаг за шагом, если это возможно.