The recursion is done in `ls()` and, in that case, each returned filename is enhanced to include the relative path (relative to the requested directory).