Allows recursion and also returns rather than echos.