1. Finiteness. An algorithm must always terminate in a finite number of steps. A procedure that has all of the characteristics of an algorithm, except that it does not always terminate, may be called a computational method. A procedure that continually interacts with its environment without terminating is a reactive process.
  2. Definiteness. The steps to be taken must be precisely defined and unambiguous. “Add a dash of salt” is not a definite step.
  3. Input. An algorithm has zero or more inputs; these may be given before the program begins, or dynamically as the algorithm runs. The inputs are from specified sets (e.g. positive integers).
  4. Output. An algorithm has at least one output; these outputs have a specified relation to the inputs.
  5. Effectiveness. Someone must be able to compute each of the steps of the algorithm with a pen and paper in finite time. An example of a noneffective step is “If is the largest integer for which there is a solution to the equation in positive integers , , and , then go to step E4”. This could become an effective step if someone were to produce an algorithm to determine whether is the largest such integer.