It might better to keep passing the same slice down the recursion tree and add start/stop positions. This needs some thought because it might just be moving the scope of the slicing we have to do around but there's a chance that due to compiler optimizations and variable scoping that it ends up being more efficient anyway...