An open API service indexing awesome lists of open source software.

https://github.com/brpapa/recursion-tree-visualizer

🌳 Input the source code of any recursive function in javascript, python or golang and visualize its recursion tree
https://github.com/brpapa/recursion-tree-visualizer

algorithms aws-lambda lambda recursion recursion-tree recursion-visualizer serverless visualization

Last synced: about 2 months ago
JSON representation

🌳 Input the source code of any recursive function in javascript, python or golang and visualize its recursion tree

Awesome Lists containing this project

README

        



Recursion Tree Visualizer

🥇 Winner project of the AlgoExpert SWE Project Contest 🥇

## Overview

Stop drawing recursion trees by hand. Watch the [demo video](https://youtu.be/1f-KeeN8AHs) or check out the [live project](https://recursion.now.sh).

### Folders structure

- `web`: react user interface.
- `lambda`: serverless lambda function to execute user-defined code remotely.

## Local development

### Web

In the `web` directory, run:

```bash
# to install all dependencies
$ npm install

# to run the app on http://localhost:3003
$ npm run start
```

### Lambda

You can use the Amazon Runtime Interface Emulator (RIE), already contained in the docker image, to test the Lambda function.

In the `lambda` directory, run:

```bash
# build your local image
$ docker build --tag rtv .

# create and run a container using AWS RIE as executable to emulate a server for your lambda function
$ docker run --rm -p 8080:8080 rtv

# make a http request to your function, passing event with the -d in body field (escaped json), see examples in requests.http file
$ curl -XPOST "http://localhost:8080/2015-03-31/functions/function/invocations" -d '{"body":"{}"}'
```

## Deploy to production

### Lambda

In `terraform` folder:

- create terraform.tfvars file
- run `terraform init`
- run `terraform validate`
- run `terraform plan`
- run `terraform apply`

### Web

Ships `web` on Vercel, setup environment variables.

## Acknowledgements

Thanks to [Drawing Presentable Trees](https://llimllib.github.io/pymag-trees/#foot5) and [Improving Walker's Algorithm to Run in Linear Time](http://dirk.jivas.de/papers/buchheim02improving.pdf) articles I implemented Reingold-Tilford's algorithm to position each node of the tree on a 2D plane in an aesthetically pleasing way.

## Compatibility

For a better experience, I recommend using a chromium-based browser like Chrome or Edge.

## Contact me

- [Twitter](https://twitter.com/brnpapa)