Эй, все, я надеюсь, что у всех все хорошо. Это будет мой первый пост на dev.to.
Рекурсия является важной темой в алгоритмах. У большинства новичков есть проблемы с пониманием рекурсии о том порядке, в котором функциональные вызовы проходят параметры и так далее. Итак, я построил простой пакет Python под названием Рекурсионный визуализатор который может быть полезной учебной помощи, а также инструмент отладки для понимания рекурсии.
Давайте сначала установим пакет: Единственная зависимость для рекурсионного визуализации – это график, который вы можете скачать с здесь
- Скачать Graphviz Binary
- Добавьте BIN Graphviz на путь вручную или добавив следующую строку в скрипте. Измените каталог установки в соответствии с вашим путем установки
# Set it to bin folder of graphviz os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
Самый простой способ установить Рекурсионный визуализатор
Пакет из пейпина
pip install recursion-visualiser
Предпочтительным способом импорта класса декоратора из пакета является как:
from visualiser.visualiser import Visualiser as vs
Теперь давайте нарисуем дерево рекурсиона для серии Fibonacci. Вот простая функция FIBONACCI.
def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2) def main(): # Call function print(fib(6)) if __name__ == "__main__": main()
Так как мы можем визуализировать FIB (6)?
Это так просто, как добавление декоратора. Вот шаги:
- Импортировать визуализатор рекурсии, добавив эту строку
from visualiser.visualiser import Visualiser as vs
- Добавить декоратор
@vs(node_properties_kwargs={"shape":"record","color":"#f57542", "style":"filled", "fillcolor":"grey"})
Я поставил node_properties_kwargs
для стилизации узла.
- Модифицировать
FIB
пройти весь аргумент как ключевые слова
def fib(n): if n <= 1: return n return fib(n=n - 1) + fib(n=n - 2)
- Позвоните
make_animation ()
метод
vs.make_animation("fibonacci.gif", delay=2)
Вот как наш последний код будет выглядеть так:
# Author: Bishal Sarang # Import Visualiser class from module visualiser from visualiser.visualiser import Visualiser as vs # Add decorator # Decorator accepts optional arguments: ignore_args , show_argument_name, show_return_value and node_properties_kwargs @vs(node_properties_kwargs={"shape":"record", "color":"#f57542", "style":"filled", "fillcolor":"grey"}) def fib(n): if n <= 1: return n return fib(n=n - 1) + fib(n=n - 2) def main(): # Call function print(fib(n=6)) # Save recursion tree to a file vs.make_animation("fibonacci.gif", delay=2) if __name__ == "__main__": main()
Вот как выглядит анимация: также дерево рекурсиона сохраняется как:
Вот ссылка на Github на пакет: https://github.com/bishAsarang/recursion-tree-visualizer.
Вот еще несколько примеров по проблеме изменения монет, фибоначчи, построение двоичной строки, подмножества и комбинации проблем: https://github.com/bishalsarang/recursion-tree-visualizer/tree/master/examples. Надеюсь, вы наслаждаетесь пакетом. Увидимся в следующем посте.
Оригинал: “https://dev.to/bishalsarang/visualize-recursion-tree-with-animation-in-python-5357”