bonjour cher tous,
je galère pour faire une combinaison récursive des éléments d'un tableau à deux dimension et donc je voudrais avoir l'aide de quelqu'un.
voici mon code que ne donne jusque là pas de résultat escompter:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//Fonction recursive de générer les différentes combinaisons pour
// un nombre de critère données ayant différentes valeurs possibles
// nCriter est le critère en cour d'utilisation
// nAvantDernier_criter represente le dernier critère du modèle courant
// nDepart est l'indice du critère courant
// nNbreCrit represente le nombre de critère sur lesquels l'on travail
// arTab est la table de table dont on souhaite combiner les éléments
function setCombinaison_suffixe(nCriter, nAvantDernier_criter, nDepart, nNbreCriter, arTab)
{
    var testTour = false;
    if (nNbreOperation == nNbreCombinaison)
        return;
 
    for (nVal_cour = nDepart; nVal_cour < arTab[nCriter].length; nVal_cour++)
    { 
        if (nCriter == nNbreCriter - 1)
        {
            strSuffixe = strSuffixe + strModele.split('|').join("") + arTab[nCriter][nVal_cour] + '|';
            nNbreOperation += 1;
        }
        else  
        {
            strModele += arTab[nCriter][nVal_cour] + '|';
            arSituationTotal[nCriter] = nVal_cour;
        }
 
        //On vérifie si on est au dernier indice du dernier critère 
        if ((nVal_cour == arTab[nCriter].length - 1) && (nCriter == nNbreCriter - 1))
        { 
            var strModeleTemp = '';
            for (var i = 0; i < strModele.split('|').length - 2; i++)
            {
                strModeleTemp += strModele.split('|')[i] + '|';
            }
            strModele = strModeleTemp;
            nNivo_Dec_positionVal = arSituationTotal[nAvantDernier_criter] + 1;
 
 
            if ((nNivo_Dec_positionVal > arTab[nAvantDernier_criter].length - 1))
            {
                if ((arSituationTotal[nAvantDernier_criter + 1] == arTab[nAvantDernier_criter + 1].length - 1) || (nAvantDernier_criter + 1 == nNbreCriter - 1))
                {
                    nAvantDernier_criter -= 1;
                    if (nAvantDernier_criter > -1)
                    {
                        var strPosition = '';
                        for (var nCompteur = nNbreCriter - 2; nCompteur > 0; nCompteur --)
                        {
                            if (arSituationTotal[nCompteur] == arTab[nCompteur].length - 1)
                            {
                                strModeleTemp = '';
                                for (var i = 0; i < strModele.split('|').length - 2; i++)
                                {
                                    strModeleTemp += strModele.split('|')[i] + '|';
                                }
                                strModele = strModeleTemp;
                            }
                            else
                            {
                                break;
                            }
                        }
                        nNivo_Dec_positionVal = arSituationTotal[nAvantDernier_criter] + 1;
                    }
                    else
                    {
                        nNivo_Dec_positionVal = arSituationTotal[1] + 1;
                        nAvantDernier_criter = 0;
                    }
                    nCriter = nAvantDernier_criter - 1;
                }
                else
                {
                    nNivo_Dec_positionVal = arSituationTotal[nAvantDernier_criter + 1] + 1;
                    nCriter = nAvantDernier_criter;
                    testTour = true;
                }
 
            }
            else if (nAvantDernier_criter > -1)
            {
                nCriter = nAvantDernier_criter - 1;
            }
 
 
            if ((arSituationTotal[0] > 0) && arSituationTotal[nNbreCriter - 2] == 0)
            {
                nAvantDernier_criter = nNbreCriter - 2;
                nCriter =  nAvantDernier_criter - 1;
            }
 
            // condition de sortie
            var bSortie = true;
            for (var i = 0; i < nNbreCriter - 2; i++)
            {
                if (arSituationTotal[i] != arTab[i].length - 1) {
                    bSortie = false;
                    break;
                }               
            }
            if ((bSortie == true) && (arSituationTotal[nNbreCriter -2] == arTab[nNbreCriter -2].length -1))
                return;
 
        }
 
        if (nCriter < nNbreCriter - 1)
        {
            // si nous sommes sur l'avant dernier critère
            if (testTour) {
                testTour = false;
                setCombinaison_suffixe(nCriter + 1, nAvantDernier_criter, nNivo_Dec_positionVal, nNbreCriter, arTab);
            }
            if (nCriter + 1 == nAvantDernier_criter) {
                if ((nAvantDernier_criter == 0) && (arSituationTotal[0] != 0)) {
                    nCriter = 0;
                }
                // on passe au critère intermediaire
                setCombinaison_suffixe(nCriter + 1, nAvantDernier_criter, nNivo_Dec_positionVal, nNbreCriter, arTab);
            }
            else { // on passe sur le dernier critère
                setCombinaison_suffixe(nCriter + 1, nAvantDernier_criter, 0, nNbreCriter,arTab);
            }
        }
 
        // Condition de sortie 
        if (nNbreCombinaison == nNbreOperation)
            break;
    }
    return;
}