A program that can call itself, or be called by another program, and repeat indefinitely until a specified condition is met.