- podziale problemu na podproblemy w celu uzyskania problemów łatwych do rozwiązania.
- wybieraniu rozwiązań, które w danym kroku wydają się najkorzystniejsze.
- przeszukiwaniu zbioru danych aż do momentu znalezienia rozwiązania.
- odwołaniu się funkcji lub definicji do samej siebie.