2016-12-08 1 views
0

Je suis très novice en programmation et j'aimerais savoir si ce code peut aussi être considéré comme une récursivité puisqu'il s'appelle lui-même. J'aimerais également savoir si c'est une bonne pratique.Est-ce considéré comme une récursivité?

void editArr(int arr[], int arrSize){ 
int index; 

cout << "Enter INDEX: "; 
cin >> index; 

if(index >= arrSize){ 
    cout << "INDEX is OUT OF BOUNDS" << endl; 
    editArr(arr, arrSize); 
} 

cout << "Enter VALUE: "; 
cin >> arr[index]; 

cout << "\n[1] Continue || [0] Exit"; 
cin >> choiceExit; 
if(choiceExit == 1) 
    editArr(arr, arrSize); 

} 
+6

Une fonction d'appel lui-même est la définition même de la récursivité. –

+0

Si c'est "bonne pratique" ou non dépend. Dans ce cas, il semble que la fonction utilise la récursivité au lieu d'une boucle pour le choix "continuer/quitter". Cet exemple spécifique de récursion serait une mauvaise pratique. –

+0

Wikiquote: Recursion en informatique est une méthode où la solution à un problème dépend des solutions aux plus petites instances du même problème (par opposition à [itération] (https://en.wikipedia.org/wiki/Iteration)) ([src] (https://en.wikipedia.org/wiki/Recursion_%28computer_science%29)) – Drop

Répondre

1

Je suis très nouveau à la programmation et je voudrais savoir si ce code peut également être considéré comme un récursivité car il appelle lui-même.

Oui, voilà comment récursion est défini. Une fonction s'appelle directement ou indirectement.

J'aimerais également savoir si c'est une bonne pratique.

En aucun général. Il est préférable de remplacer ce code par une boucle et d'utiliser une pile (par exemple std::stack). Dans votre cas, même une simple boucle fonctionnerait bien.

appels récursifs dépendent de la (limité) la taille de la pile d'appel intrinsèque, et sont sujettes à déborder la pile d'appel.

1

La fonction s'appelle elle-même, elle est récursive.

Le programme attribuera un nouveau cadre de pile à chaque fois que l'utilisateur choisit de continuer, comme cela pourrait se produire indéfiniment, je dirais une boucle est un meilleur choix ici.

En note, cette fonction est tail recursive (sauf quand un index OOB est donné, alors tout se déchaîne), de sorte que le compilateur peut bien optimiser l'allocation du cadre de pile supplémentaire, personnellement, je ne compterais pas là-dessus .

+0

"cette fonction est récursive en queue". Bogues Modulo. –

0

Il semble que cela fonctionnera. N'oubliez pas de définir choiceExit comme un entier en haut de la fonction. Notez que ce n'est pas la manière habituelle d'initialiser un tableau, la récursivité est un peu "lourde". Il est également important de noter que vous n'avez pas besoin de mettre Arraysize en paramètre car la taille (Arr) le donnera. Une boucle while serait en effet bien mieux. ChoiceExit pourrait être une valeur booléenne par la manière, car il n'y a que deux « cas » possibles

+0

"Il semble que ça va marcher." Pour une définition du "travail". "taille (Arr) va le donner". Pas vraiment. –

+0

@ n.m. sizeof devrait fonctionner? –

+0

Non, cela ne fonctionnera pas. –