algorithmes récursifs sont ces algorithmes qui peuvent s'appeler eux-mêmes dans le cadre de leur solution. Ces fonctions travaillent souvent sur des problèmes qui contiennent une série de sous-problèmes identiques , comme traversée de l'arbre ou du calcul factoriel . Appelant à plusieurs reprises la même fonction , encore et peut rendre le travail plus lent, même si cela peut rendre le code plus simple. Pour augmenter la vitesse d'exécution, vous pouvez recréer des algorithmes récursifs , comme l'algorithme factorielle , dans un algorithme itératif peu plus compliqué en utilisant des boucles qui s'exécutent beaucoup plus vite. Instructions
1
Analyser l'algorithme récursif . Dans cet exemple, vous utiliserez la solution récursive pour le problème factorielle :
int factorielle (int fait ) {
if ( fait == 0) { return 1; } else { réalité de retour * factorielle ( fait - 1 );}}
2
Décidez si les arguments de la fonction peuvent être détenus dans des variables . Dans l'exemple factoriel , les résultats de la factorielle peuvent être stockées dans une variable " total_factorial " pour la durée d'une itération . Cet exemple montre l'algorithme récursif factorielle et la variable à utiliser pour l'argument récurrent :
int total_factorial = 0:
3
déterminer une structure de boucle . En C + + , par exemple , la boucle "while" fonctionne bien avec des itérations qui ont une longueur d' indéterminées . «Pour» boucles , d'autre part , fonctionnent bien quand une boucle ira pour une durée strict , représentée par un nombre entier d'une certaine sorte . Pour l'exemple factorielle , une boucle "for " va bien travailler :
int factorielle = 5; int total_factorial = 0;
4
Déterminer stopper conditions. Habituellement , comme dans l'exemple factorielle , la récursion se terminera quand une condition est remplie . Dans une boucle itérative , comme la boucle , il est utile de connaître avant la main. Puisque vous savez que dans la recherche de la factorielle d'un nombre "n" que vous allez parcourir n- 1 fois (excluant zéro) , vous pouvez commencer à une marche jusqu'à ce que le nombre factorielle :
for (int i = 1; i <= factorielle ; i + + ) {if ( i == 1) { total_factorial = 1; } else {total factorielle * = i ;}}