Donc je crois que si jeEn utilisant ++ int et int + 1 et d'obtenir un résultat différent
int i = 0;
i++;
OU
++i;
OU
i += 1;
OU
i = i + 1;
il est censé donner le même résultat. Sauf que quand je l'ai utilisé dans mon programme, il m'a donné un résultat différent.
Le contexte spécifique était dans l'appel à une fonction récursive. Essayer mon meilleur, bien que l'anglais ne soit pas ma langue principale, ni pour moi ni mon programme ...
Ma fonction, fondamentalement, calcule le "degré" de la différence entre deux mots. En guise d'optimisation, ma première vérification à chaque appel est de voir si mon nombre d'erreurs est supérieur à un nombre maximum donné ou à des erreurs. Alors, quand il appelle lui-même, il va comme:
errors = function(wordA,wordB, numberErrorMax, actualNumberOfErrors);
Maintenant, dans certains cas, il se dit aussi avec une erreur comme si additionnelle:
errors = function(wordA, wordB, numberErrorMax, actualNumberOfErrors+1) +1;
errors = function(wordA, wordB, numberErrorMax, ++actualNumberOfErrors) +1;
Sauf, ces deux appels ne produiraient pas le même résultat, même si je n'ai changé que ++
et +1
dans mon appel récursif. Celui qui a fini par me donner de bons résultats était +1
, et ma fonction fonctionne maintenant correctement, mais je ne comprends pas comment cela a fait une différence.
Quelqu'un peut-il m'expliquer cela? :) merci
EDIT
Merci pour toutes ces réponses. Je ne peux/ne peux pas montrer ma fonction, parce que:
1- tout est en français (projet d'école, doit être en français) donc tous mes commentaires, noms de variables et autres ne signifieraient rien pour la plupart des gens
2- Je crois que mes camarades de classe utilisent très probablement aussi ce site et je ne voudrais pas que mon code soit volé jusqu'à être accusé d'avoir copié le travail de quelqu'un d'autre.
l'enseignant nous a fourni un algorithme de base, ce qui conduit la fonction à appeler lui-même 3 fois de suite, en cas wordlength n'est pas 0. qui sont:
func(wA,wB, lengthA - 1, lengthB) + 1
func(wA,wB, lengthA, lengthB - 1) + 1
func(wA,wB, lengthA - 1, lengthB - 1) + (wA[i] != wB[i])
et nous prenons le résultat le plus bas de ces trois appels. Donc, chaque fois que nous regardons 2 longs caractères, il passe quelques dizaines de fois à travers la fonction à travers les différents appels. Le +1 à la fin signifie que nous considérons qu'il y a une erreur ici. le dernier appel n'ajoute qu'une erreur si les deux lettres sont différentes.
Mon touche personnelle était d'avoir la place:
func(wA,wB, lengthA - 1, lengthB, maxError, **++nbError**) + 1
func(wA,wB, lengthA, lengthB - 1, maxError, **++nbError**) + 1
if (wA[i] != wB[i]) { int err = 1; nbError++;}
func(wA,wB, lengthA - 1, lengthB - 1, maxError, nbError) + err
et cela m'a donné des résultats erronés à la fin, je souvent, mais pas toujours, finissent avec une « erreur » supplémentaire. je l'ai changé à:
func(wA,wB, lengthA - 1, lengthB, maxError, **nbError+1**) + 1
func(wA,wB, lengthA, lengthB - 1, maxError, **nbError+1**) + 1
if (wA[i] != wB[i]) { int err = 1; nbError++;}
func(wA,wB, lengthA - 1, lengthB - 1, maxError, nbError) + err
et maintenant il fonctionne parfaitement. Aucune idée pourquoi il a fait une différence bien et qui est ce que je sens que je dois comprendre en quelque sorte ...
Bienvenue dans Stack Overflow. Veuillez prendre le temps de lire [The Tour] (http://stackoverflow.com/tour) et de consulter le contenu du [Centre d'aide] (http://stackoverflow.com/help/asking) quoi et comment vous pouvez demandez ici. –
Le contexte est insuffisant pour répondre à votre question. Veuillez fournir un [MCVE] (stackoverflow.com/help/mcve). –
Les préfixes par rapport à l'incrément de postfix donnent des résultats différents dans différents contextes. Vous devez montrer le code * réel * pour que nous puissions répondre. –