Knuth (1968, 1973) has given a list of five properties that are widely accepted as requirements for an algorithm:
Finiteness: “An algorithm must always terminate after a finite number of steps”
Definiteness: “Each step of an algorithm must be precisely defined; the actions to be carried out must be rigorously and unambiguously specified for each case”
Input: “…quantities which are given to it initially before the algorithm begins. These inputs are taken from specified sets of objects”
Output: “…quantities which have a specified relation to the inputs”
Effectiveness: “… all of the operations to be performed in the algorithm must be sufficiently basic that they can in principle be done exactly and in a finite length of time by a man using paper and pencil”
Knuth offers as an example the Euclidean algorithm for determining the greatest common divisor of two natural numbers.