Metadata-Version: 2.1
Name: recursion-visualiser
Version: 0.0.2
Summary: A small python package to visualise recursive function on Python. It draws recursion tree
Home-page: https://github.com/sarangbishal/Recursion-Tree-Visualizer
Author: Bishal Sarangkoti
Author-email: sarangbishal@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: pydot

# Recursion Visualiser
Recursion visualiser is a python tool that draws recursion tree for recursive function with very less code changes.

## Example
### 1.  Fibonacci
Let's draw the recursion tree for fibonacci number.
Here is how the simple code looks like
```python
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
```python
# Author: Bishal Sarang

# Import Visualiser class from module visualiser
from visualiser import Visualiser as vs

# Add decorator
# Decorator accepts arguments: ignore_args and show_argument_name
@vs(ignore_args=['node_num'])
def fib(n, node_num):
    if n <= 1:
        return n

    # Increment decorator class node_count before each function calls
    vs.node_count += 1
    left = fib(n=n - 1, node_num=vs.node_count)

	# node_count is incremented
    vs.node_count += 1
    right = fib(n=n - 2, node_num=vs.node_count)
    return left + right

# Call function
print(fib(n=6, node_num=0))

# Save recursion tree to a file
vs.write_image("fibonacci.png")
```
Here are the changes required:

 - Change function signature from `fib(n)` to `fib(n, node_num)`
 - Add decorator Visualiser which accepts arguments `ignore_args` and `show_argument_name`
 - Before each function calls make sure to increment `node_count` argument of decorator class 
 - Change every function calls to pass as keyword arguments.
 - Write the image

Here is how the recursion tree looks like:
![enter image description here](https://github.com/sarangbishal/Recursion-Visualizer/blob/master/examples/fibonacci.png)

## 2. Make sum
This is taken from one of my answers on quora where I had to manually  draw recursion tree. Using Visualiser with very less changes I was able to draw the following tree. You can compare the tree [here](https://qr.ae/TltTCV)
![enter image description here](https://github.com/sarangbishal/Recursion-Visualizer/blob/master/examples/make_sum.png)


## Installation
The only dependency for recursin visualiser is Graphviz which you can download from [here](https://www.graphviz.org/download/)



-   Download  [graphviz binary](https://www.graphviz.org/download/)
-   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 all the requirements

```
pip install -r requirements.txt
```

See the examples inside `example` toknow how to use


## TODO:

 - [x] Minimal working version
 - [ ] Refactor
 - [ ] Handle base cases
 - [ ] Make more beautful trees



