Les problèmes de programmation dynamique peuvent être résolus à l'aide d'approches ascendantes ou descendantes.
En général, l'approche ascendante utilise la technique de la tabulation, tandis que l'approche descendante utilise la technique de la récursion (avec mémorisation).
Mais vous pouvez aussi avoir des approches ascendantes et descendantes en utilisant la récursion comme indiqué ci-dessous.
De bas en haut : Commencez par la condition de base et passez la valeur calculée jusqu'à présent de manière récursive. En général, il s'agit de récursions de queue.
int n = 5;
fibBottomUp(1, 1, 2, n);
private int fibBottomUp(int i, int j, int count, int n) {
if (count > n) return 1;
if (count == n) return i + j;
return fibBottomUp(j, i + j, count + 1, n);
}
De haut en bas : Commencer par la condition finale et obtenir récursivement le résultat de ses sous-problèmes.
int n = 5;
fibTopDown(n);
private int fibTopDown(int n) {
if (n <= 1) return 1;
return fibTopDown(n - 1) + fibTopDown(n - 2);
}
6 votes
En rapport : stackoverflow.com/questions/6184869/