Subroutine — named block of reusable code; procedure (no return) or function (returns value)
Parameters — named in definition; Arguments — values passed on call
By value — copy passed, original unchanged; By reference — address passed, original can change
Local — inside subroutine only; Global — accessible everywhere
Recursion — calls itself; needs a base case + recursive case; uses call stack