An algorithmic technique where a function, in order to accomplish a task, calls itself with some part of the task.