Recursion visualiser is a python tool that visualizes recursion tree with animation and draws recursion tree for recursive function. It works with almost any type of recursive function. Just add the recursion-visualiser decorator to your function and let it do the rest of the work.
The only dependency for recursion visualiser is Graphviz
- Download graphviz binary
- Add graphviz bin to path manually or by adding the following line on your script. Change the installation directory according to your installation path
# Set it to bin folder of graphviz os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/' - Install graphviz
sudo apt install graphviz The instructions to install graphviz for other operating system is available here
The easiest way to install recursion-visualiser package is from pypi
pip install recursion-visualiser An alternative way is to clone the repository and install all the requirements.
pip install -r requirements.txt If you have docker and docker-compose installed then you can install recursion-tree-visualiser using Docker and docker-compose.yml file
- Download
Dockerfile from repo
curl https://raw.githubusercontent.com/Bishalsarang/Recursion-Tree-Visualizer/master/Dockerfile --output Dockerfile- Download
docker-compose.yml
curl https://raw.githubusercontent.com/Bishalsarang/Recursion-Tree-Visualizer/master/docker-compose.yml --output docker-compose.yml- Start docker container
CURRENT_UID=$(id -u):$(id -g) docker-compose up- Run any python scripts and run using
docker-compose exec vs python fibonacci.py The preferred way to import the decorator class from the package is as:
from visualiser.visualiser import Visualiser as vsLet's draw the recursion tree for fibonacci number.
Here is how the simple code looks like
def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2) print(fib(6)) Now we want to draw the recursion tree for this function. It is as simple as adding a decorator
# 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()Here are the changes required:
- Add decorator Visualiser which accepts optional arguments
ignore_args,show_argument_nameand 'show_return_value' - Change every function calls to pass as keyword arguments.
- Make_animation
The output image are saved as "fibonacci.gif" and "fibonacci.png"
Here is how the recursion tree looks like:
Animation: 
If you like this project and want to support it, consider buying me a coffee!
Thank you for your support!
- Minimal working version
- Upload package to pypi
- Support animation
- Add node styles
- Support aliasing for function name
- Show repeated states
- Support node_color, backgroundcolor etc
- Refactor
- Handle base cases
- Make more beautiful trees

