added another implementation that's much easier to use but misses the base case
added license