si tout est indiscernable, si je ne me trompe, c'est le nombre de partitions du nombre n en au plus k sommants p(n,k)
à part l'utilisation de fonctions génératrices (complètement hors sujet) on ne peut calculer ça que par récurrence.
p(0, k) = 1 (une seule façon de ne mettre aucun objet dans autant de tiroirs qu'on veut)
p(n, 0) = 0 (aucune façon de mettre des objets dans aucun tiroir)
p(n, 1) = 1 (une seule façon de mettre tous ces objets dans le seul tiroir qu'il y a)
p(1, k) = 1 (une seule façon de mettre un seul objet dans un quelconque des tiroirs)
et ensuite par récurrence :
p(n, k) = p(n, k-1) + p(n-k, k)
avec p(n-k, m) = 0 si n-k<0 quel que soit m
et un tableau des p(n, k) qui s'obtient un peu comme le triangle de Pascal
exemple, pour mettre 7 objets dans 3 tiroirs il y a 8 possibilités
7 tout dans un seul des tiroirs
6+1, 5+2, 4+3 en utilisant deux des trois tiroirs
5+1+1, 4+2+1, 3+2+2, 3+3+1 avec quelque chose dans chacun des tiroirs
le lecteur pourra calculer ça avec la récurrence ou le tableau
fonction récursive en Python pour calculer ça avec la définition ci dessus :
def p(n,k):
if(n<0 or k==0):
return 0
if(n==0 or n==1 or k==1):
return 1
return p(n,k-1)+p(n-k,k)
(la fonction s'appelle elle même, d'où l'appellation de "fonction récursive")