2017-04-07 52 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); 
    } 
} 

所以,我想知道为什么我的x没有递增。当我拨打zero_int时,它保持为零。任何理由?我该如何解决?递增一个参数和递归

+0

看看如果将'x ++'更改为'++ x'会发生什么? – 4386427

+0

谢谢!有什么不同? –

回答

1

你应该使用++x,与x++x值传递到递归调用无增量,则主叫方法的范围内增加,所以你将有所有的递归情况相同x值。

++的位置决定了增量的时间,在你的情况下它应该在方法调用中被评估之前。

More on this topic.

-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); 
} 
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。它被称为前缀增量。