Lorsque vous convertissez une itération à récursivité, regardez la variable de la boucle. Dans ce cas, c'est votre variable y
. Faites-en un paramètre de votre fonction récursive. Ensuite, regardez les autres variables qui changent pendant que vous itérez votre boucle, et faites-en les paramètres aussi. À ce stade, vous devriez avoir votre déclaration de fonction vers le bas:
int quatItRecursive(int y, int x, int z) {
...
}
Maintenant vous êtes prêt à travailler sur le corps de votre fonction. Commencez avec le cas de base en considérant le résultat obtenu lorsque la boucle ne démarre pas (c'est-à-dire lorsque n
est égal à zéro). Dans ce cas, votre fonction renvoie x
. Alors maintenant, vous avez votre cas de base:
int quatItRecursive(int y, int x, int z) {
if (y == 0) {
return x;
}
...
}
Pour terminer le corps, ajoutez l'étape récursive, à savoir un appel qui effectue l'étape de la boucle. Il est un appel récursif maintenant, avec des paramètres qui égalent ce que les variables seraient dans la prochaine itération de la boucle:
int quatItRecursive(int y, int x, int z) {
if (y == 0) {
return x;
}
return quatItRecursive(y-1, x + z, z + 2);
}
Enfin, ajoutez une enveloppe qui prend un seul paramètre, la façon dont votre fonction d'origine a fait:
int quantIT(int n) {
return quatItRecursive(n, 0, 1);
}
Ne serait-il préférable de le convertir en une fonction non itérative? Il y a une expression fermée pour la somme (N * N pour les N premiers nombres impairs). Quelles sont les règles pour la récursivité?Établir des cas de base; si l'entrée n'est pas le cas de base, recurse en utilisant des arguments plus proches du cas de base. –
Pouvez-vous élaborer l'expression "base de cas"? Je n'ai pas très bien compris. –
Le schéma général de toute fonction récursive (sûre) comporte deux parties. Une partie est un ou plusieurs cas de base qui peuvent être résolus trivialement; l'autre partie implique la récursivité. Par exemple, si N = 0, alors la somme des N premiers nombres impairs vaut également 0. Si N est plus grand que 0, alors vous devez savoir calculer la fonction (N-1) et combiner ce résultat avec la valeur de N pour donner le résultat final (pour ce niveau dans la pile de récursivité). Regardez les réponses ci-dessous: la plupart (sinon la totalité) d'entre elles illustrent ceci. –