Skip to main content

A small python package to visualise recursive function on Python. It draws recursion tree

Project description

Recursion Visualiser

PyPI downloads Stars Forks

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.

Installation

The only dependency for recursion visualiser is Graphviz which you can download from here

  • 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/'  

The easiest way to install recursion-visualiser package is from pypi

pip install recursion-visualiser

The preferred way to import the decorator class from the package is as:

from visualiser.visualiser import Visualiser as vs

An alternative way is to clone the repository and install all the requirements.

pip install -r requirements.txt

Usage

1. Fibonacci

Let'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_name and '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: enter image description here

enter image description here

Support:

Find other examples here and read more about recursion-visualiser here The official documentation for recursion-visualiser is available at https://recursion-visualiser.readthedocs.io/en/

TODO:

  • <input type="checkbox" checked="" disabled="" /> Minimal working version
  • <input type="checkbox" checked="" disabled="" /> Upload package to pypi
  • <input type="checkbox" checked="" disabled="" /> Support animation
  • <input type="checkbox" checked="" disabled="" /> Add node styles
  • <input type="checkbox" disabled="" /> Support aliasing for function name
  • <input type="checkbox" disabled="" /> Show repeated states
  • <input type="checkbox" checked="" disabled="" /> Support node_color, backgroundcolor etc
  • <input type="checkbox" disabled="" /> Refactor
  • <input type="checkbox" disabled="" /> Handle base cases
  • <input type="checkbox" disabled="" /> Make more beautiful trees

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for recursion-visualiser, version 1.0.2
Filename, size File type Python version Upload date Hashes
Filename, size recursion_visualiser-1.0.2-py3-none-any.whl (6.9 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size recursion-visualiser-1.0.2.tar.gz (6.0 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page