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 ;}}
|