● Any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output.
● A sequence of computational steps that transform the input into the output.
● A tool for solving a well-specified computational problem. The statement of the problem specifies in general terms the desired input/output relationship.