A Nico1610 - Récursivité

Résolu
LIQUIDAMBAR Messages postés 5 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 12 mai 2006 - 5 févr. 2006 à 23:48
LIQUIDAMBAR Messages postés 5 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 12 mai 2006 - 9 févr. 2006 à 09:47
J'ai trouvé ce programme dans les codes sources et la procédure combinaisons m'est incompréhensible. Merci pour ton aide,
GDM

Private Sub cmdGO_Click()
Dim Valeur(0 To 2) As Integer
Dim i As Integer
Dim N As Long
Dim Fichsortie As Integer
Fichsortie = 1
Open "c:\m.doc" For Output As #1
For i = 0 To 2
If Not IsNumeric(txtSomme(i).Text) Then Exit Sub
Valeur(i) = CInt(txtSomme(i).Text)
Next


With lstCombinaisons
' .Clear
Combinaisons Valeur(0), Valeur(1), Valeur(2)
N = .ListCount
If N < 0 Then N = 2 ^ 16 + N ' dépassement de capacité
.AddItem CStr(N) & " possibilité(s) :", 0
End With
Print #1,
Print #1, CStr(N) & " séries "
Close #1
End Sub


' -------------------------------------------------------------------
' Nom : Combinaisons
' Desc : Cherche k nombres différents, inférieurs ou égaux à N,
' tels que leur somme soit égale à Somme
' -------------------------------------------------------------------
Private Sub Combinaisons( _
ByVal Somme As Integer, ByVal k As Integer, ByVal N As Integer, _
Optional ByVal strComb As String = "")
Dim Min As Integer, Max As Integer
Dim i As Integer


Min = k * (k + 1) / 2
Max = (N + 1) * k - Min
If Somme < Min Or Somme > Max Then Exit Sub

If k = 1 Then ' fin de la récursivité
If Somme <= N Then ' combinaison trouvée
strComb = strComb & CStr(Somme)
lstCombinaisons.AddItem strComb
End If
Print #1, strComb
Else ' lance la récursivité
Max = Somme - k * (k - 1) / 2
Min = (2 * Somme - Max) / k
If N < Max Then Max = N
For i = Max To Min Step -1
Combinaisons Somme - i, k - 1, i - 1, _
strComb & CStr(i) & "+"
Next
End If

End Sub

GDM

6 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 févr. 2006 à 04:17
pour comprendre, il faut prendre un exemple et essayer de suivre:

exemple avec:

Somme=9 k=3 N=5





contrôle:

3+4+5 --> Max=12

1+2+3 --> Min=6

donc 9 est bien compris entre 6 et 12



pour un chiffre en moins (k=2):

- le Minimun est de 3 (=1+2)

il reste donc un Max de 9 - 3 --> 6

- jusqu'à une limite moyenne ??? <-- c'est ici le point le plus délicat

Min ( (Somme-Max) + (Somme))/kt (9-6 + 9)/3 = 4

- etc ...



récapitulation:

Somme=9 k=3 N=5

Max=9 - 3*2/2 = 6

Min (2*9 - 6)/34
N < Max donc Max=5

i=5 Combinaisons 4,2,4,"5+"

Somme=4 k=2 N=4

Max=4 - 2*1/2 = 3

Min(2*4-3)/2 2

i=3 Combinaisons 1,1,2,"5+3+"

k=1 donc print "5+ 3+ 1"

i=2 Combinaisons 2,1,1,"5+2+"


eXit parce que Somme > 1

i=4 Combinaisons 5,2,3,"4+"

Somme=5 k=2 N=3

Max=5 - 2*1/2 = 4

Min(2*5-4)/2 3

N < Max donc Max=3

i=3 Combinaisons 2,1,2,"4+3+"


k=1 donc print "4+ 3+ 2"


Daniel
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
6 févr. 2006 à 01:46
Bon, et alors, c'est quoi ton problème ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
6 févr. 2006 à 05:52
Salut,

Bel effort de Gobillot !! .. j'ai pas vérifié mais je lui fais confiance...

Bon courage ..

++

Zlub
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 févr. 2006 à 17:54
pour plus d'explications, il vaudrait mieux s'adresser directement à l'auteur



http://vbfrance.com/code.aspx?ID=20350
Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
6 févr. 2006 à 18:55
Salut,


Re bel effort de Gobillot ... qui lache pas le morceau !!

++

Zlub
0
LIQUIDAMBAR Messages postés 5 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 12 mai 2006
9 févr. 2006 à 09:47
Bonjour,

Merci à tous pour avoir daigné répondre à mon problème. Proficiat Gobillot, c'était on ne peut plus clair. Encore un tout grand merci.

GDM
0
Rejoignez-nous