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);
}
}
所以,我试图了解为什么我的x
没有递增。当我拨打zero_int
时,它会保持为零。有什么理由吗?我该如何解决这个问题?
答案 0 :(得分:2)
当你这样做时
foo(x++);
等同于
temp = x;
x = x + 1;
foo(temp);
因此,您可以说x++
返回x
,然后递增x
。它被称为后缀增量。
因此,在您的代码中,您可以使用相同的x
如果你这样做
foo(++x);
等同于
x = x + 1;
temp = x;
foo(temp);
因此,您可以说++x
增加x
然后返回x
。它被称为前缀增量。
答案 1 :(得分:1)
您应该使用++x
,x++
将x
的值传递给递归调用而不增加,然后在调用方法的范围内递增,因此您将具有相同的x
{1}}所有递归案例的值。
++
的位置决定了增量的时间,在你的情况下它应该在方法调用中被评估之前。
答案 2 :(得分:-1)
您的x未被增加,因为您尝试将其作为函数的参数递增。首先增加x然后将其传递给函数。它可以解决你的问题。
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);
}