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
| /* une chaine de caractères comprenant les caractères de référence */
static const std::string letters="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* la fonction récursive
* @ in-out tab: le tableau de chaines de caractères final
* in str: la chaine en cours de création
* in ind: l'index à utiliser dans la chaine "letters"
*/
void generate(std::vector<std::string>& tab, std::string str, size_t ind)
{
/* il ne faut de toutes manières pas que l'index dépasse
* le nombre de caractères existant dans la chaine de référence
*/
if(ind<26)
{
/* si la chaine créée contient 4 caractères, nous sommes
* face au cas de base, et nous pouvons donc l'insérer dans
* le tableau
*/
if(str.size()==4)
{
tab.push_back(str);
}
else
{
/* sinon, nous appelons la récursivité avec la chaine telle
* qu'elle est, mais en incrémentant la valeur de l'index (pour
* etre sur d'arriver au final à la chaine ZZZZ)
*/
generate(tab,str,val+1);
/* nous rajoutons à la chaine le caractère de référence
* pour nous permettre d'atteindre le second cas de base:
* une chaine de caractères composée de 4 lettres
*/
str+=letters[val];
/* et nous appelons la récursivité pour cette chaines de
* caractères
*/
generate(tab,str,0);
}
}
} |
Partager