Sally (./12) :
exemple au pif : si a et b sont deux de tes nombres, il existe un grand nombre de possibilités où intervient a*b ; tu dois a priori tester toutes ces possibilités, mais ça ne veut pas dire que tu dois recalculer a*b à chaque fois.
Si l’algorithme est récursif, a*b ne sera pas recalculé mais passé en argument de la « méthode à N-1 arguments » (façon de parler).
Sally (./12) :
A priori on n'a pas de buts négatifs ou non entiers (?) donc il n'y a qu'une seule manière d'appliquer une opération à deux nombres (si c'est une soustraction on soustrait toujours le plus petit du plus grand, idem pour une division).
Oh, très bien vu !
Certes, on pourra argumenter du fait que l’on ait envie de calculer (4-9)+12, avec donc un nombre intermédiaire négatif, mais quand on va calculer (12-9)+4, on trouvera de toute façon le même résultat, donc autant éliminer immédiatement les cas dont on sait qu’ils réapparaîtront sous une autre forme lors de la recherche exhaustive des cas possibles.
Sally (./12) :
J'essaie de majorer rapidement le nombre de solutions pour 4 nombres. […] Donc pour choisir les deux premiers nombres tu as 6 possibilités (s'ils sont tous différents), fois 4 opérations, ça fait 24. Pour la deuxième opération il te reste trois nombres, tu as trois manières d'en choisir deux, fois 4 opérations, ça fait 12, et ensuite il te reste à choisir la troisième opération, 4 possibilités.
Donc au total il y a au plus 24×12×4 = 1152 possibilités.
Il s’agit d’ailleurs du décompte de l’algorithme récursif, dans lequel la « méthode à 4 arguments » ([ie.[/i] avec en argument une liste de 4 valeurs, pour l’implantation) fait 24 appels à elle-même, mais « avec 3 arguments » (laquelle faut 12 appels à elle-même « avec 2 arguments ».
De mon côté, je suis d’abord parti en explicitant, pour N=2 à 5 nombres, les différents « arbres de calcul » et en permutant ensuite les nombres dans ces arbres.
Exemple : pour N=4, on a 2 arbres différents (le signe ¤ représente 1 des 4 opérations) :[ul][li]((A¤B)¤C)¤D => 768 possibilités maximum ;[/li][li](A¤B)¤(C¤D) => 384 possibilités maximum.[/li][/ul]On retrouve bien les 1152 possibilités annoncées plus haut.
Puis, en cherchant la construction de l’ensemble des arbres à N nombres à partir des arbres à N-1 nombres, pour en déduire la formule de récurrence sur le nombre maximum de possibilités.
En bref, le nombre
maximum de possibilités à N nombres vaut :[ul][li]Nmp(2) = 4[/li][li]Nmp(N>2) = 4^(N-2) × (N-1) × N![/li][/ul]
Notez que Nmp(4) = 1152 et Nmp(5) = 30720, et donc que Nmp(5)/Nmp(4) = 80/3 et non 40 comme on s’y attendrait en suivant le raisonnement de Sally (avec lequel plusieurs arbres de calcul sont en double).
Démonstration complète à la demande

…
Mais attention, il s’agit d’un simple majorant (à peine plus recherché que celui de Sally qui m’a quand même ouvert la voie) qui ne donne pas grand chose sur l’algorithme de recherche exhaustive (à part le fait qu’il sera récursif

).
My two cents.