Recursion is a function that calls itself. It has an if statement to stop the recursive calls and prevent infinite loops. Recursion decreases code size but uses more processor time and space. It is difficult to debug due to tracing recursive calls. Any recursive function must have an if statement to terminate the calls or it will never return.