2017-04-07 1 views
1
void base_aux(unsigned int n, unsigned int base, unsigned int x) { 
    if (n > (base - 1)) { 
     printf("%u", n % base); 
     base_aux(n/base, base, x++); 
    } else { 
     printf("%u", n); 
     zero_int(32 - x); 
     printf("\n %d \n", x); 
    } 
} 

Donc, j'essaie de voir pourquoi mon x n'augmente pas. Il reste à zéro quand j'appelle zero_int. Une raison pour laquelle? Comment puis-je réparer ça?Incrémentation d'un argument et récursivité

+0

Voir ce qui se passe si vous changez «x ++» en «++ x» – 4386427

+0

Merci! Quelle est la différence? –

Répondre

1

Vous devez utiliser ++x, avec x++ la valeur de x est passé dans l'appel récursif sans incrément, puis incrémentée dans le cadre de la méthode de l'appelant, ainsi vous aurez même valeur x pour tous les cas de récursion.

L'emplacement de ++ détermine la temporisation d'incrémentation, et dans votre cas, il doit l'être avant d'être évalué dans l'appel de méthode.

More on this topic.

-1

Votre x n'est pas augmenté parce que vous essayez incrémenter en comme argument à la fonction. Augmentez d'abord x et passez-le à la fonction. Cela peut résoudre votre problème.

 void base_aux(unsigned int n, unsigned int base, unsigned int x) { 
if (n > (base - 1)) { 
    printf("%u", n % base); 
    x=x+1; 
    base_aux(n/base, base, x); 
} else { 
    printf("%u", n); 
    zero_int(32 - x); 
    printf("\n %d \n", x); 
} 
2

Lorsque vous

foo(x++); 

il est équivalent à

temp = x; 
x = x + 1; 
foo(temp); 

vous pouvez donc dire que x++ retours x et incrémente x. C'est ce qu'on appelle l'incrément de postfix.

Donc, dans votre code que vous gardez appeler la fonction avec la même valeur de x

Si vous

foo(++x); 

il est équivalent à

x = x + 1; 
temp = x; 
foo(temp); 

Ainsi, vous pouvez dire que ++x incrémente x et renvoie x. C'est ce qu'on appelle l'incrément de préfixe.