Knuth defines the following characteristics for an algorithm;
- Finiteness. An algorithm must always terminate after a finite number of steps.
- Definiteness. Each step must be carried out rigorously and unambiguously.
- Input. An algorithm has zero or more inputs.
- Outputs. An algorithm has one or more outputs.
- Effectiveness. Steps must be sufficiently basic so that they could be done using a pen and paper.