La programmation dynamique est une méthode de programmation qui permet d'éviter notamment deux problèmes de la récurrence. Elle permet la résolution de ces problèmes qui sont la répétitivité d'un programme (le temps d'exécution trop long) et l'empilage non infini de la récurrence, en mémorisant le résultat et en le réutilisant quand nécessaire. Ça reprend le principe de “diviser pour régner” mais en mémorisant, permet de résoudre un sous problème qu'une seul fois et de réutiliser ce résultat.
Par exemple la programmation dynamique permet d'effectuer la suite de Fibonacci plus rapidement et la création d'un algorithme palliant au problème de l'algorithme glouton.
Exemple d'algorithme utilisant la programmation dynamique et renvoyant le plus petit nombre de pièces rendables qui grâce à cette méthode de mémorisation, peut faire toutes les possibilités possibles:
def rendu_monnaie_rec(P,X): if X==0: return 0 else: mini = 1000 for i in range(len(P)): if P[i]<=X: nb = 1 + rendu_monnaie_rec(P,X-P[i]) if nb<mini: mini = nb return mini pieces = (2,5,10,50,100)