1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
fonction decompose(val_a_trouver, coef_max, nombre_max, liste_deja_obtenue)
val_a_trouver : nombre dont on veut calculer la decomposition
coef_max : le coefficient maximal à utiliser
nombre_max : le nombre maximum à utiliser
liste_deja_obtenue : la liste des produits déjà obtenus par les appels récursifs précédents, forme ((coef1, val1) (coef2, val2) ...
début
si val_a_trouver = 0 alors
ajouter liste_deja_obtenue à la liste globale des décompositions
sinon si coef_max = 0 ou nombre_max = 0 alors
ne rien faire, c'est un "échec"
sinon
commentaire : on essye de trouver avec un coeff plus petit ou un nombre pluspetit
decompose(val_a_trouver, coef_max - 1, nombre_max, liste_deja_obtenue)
decompose(val_a_trouver, coef_max, nombre_max - 1, liste_deja_obtenue)
temp <- coef_max * nombre_max
si temp <= val_a_trouver alors
nouvelle_liste <- liste_deja_obtenue Union (coef_max, val_max)
nouvelle_valeur <- val_a_trouver - temp
decompose(nouvelle_valeur, coef_max - 1, nombre_max, nouvelle_liste)
decompose(nouvelle_valeur, coef_max, nombre_max - 1, nouvelle_liste)
finc si
fin si
fin |
Partager