Je joue avec une certaine récursivité et j'essaie de compter le nombre d'additions dans une fonction fib récursive (code ci-dessous). Le problème est que g_add
ne s'imprime jamais que par zéro (0). Dans le débogueur, il est correctement défini, mais il ne s'imprimera pas correctement. En fait, le code ci-dessous est modifié un peu, pour vérifier que tout le reste est OK. Dans la vraie vie, g_add est mis à zéro au départ, pas 10 ci-dessous, mais regardez la sortie est l'impression ...La variable globale ne s'imprime pas correctement dans le studio visuel
volatile int g_add = 10;
int rfib(int n)
{
if(n == 0) return 0;
else if(n == 1) return 1;
else {
++g_add;
return rfib(n-1) + rfib(n-2);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("Fib: %d\n", g_add);
for(int n =0; n<6;n++,g_add = 0)
{
printf("Fib %d is: %d - additions: %d\n", n, rfib(n), g_add);
}
}
Et la sortie:
Fib: 10
Fib 0 is: 0 - additions: 10
Fib 1 is: 1 - additions: 0
Fib 2 is: 1 - additions: 0
Fib 3 is: 2 - additions: 0 (note, the debugger says it is 1)
Fib 4 is: 3 - additions: 0
Fib 5 is: 5 - additions: 0
Toute réflexion sur les raisons g_add n'est pas imprimé correctement? Et qu'est-ce que je pourrais faire à ce sujet? J'ai essayé avec et sans le mot clé volatile. Je pense que cela pourrait être lié à l'environnement VS, plutôt que C++ donc, j'ai marqué les deux.
Fonction opérandes ordre d'évaluation ne sont pas spécifiés par les normes à-dire qu'il est laissée au compilateur décider de l'ordre d'évaluation. – AraK