增加参数和递归

时间:2017-04-07 04:31:24

标签: c recursion increment

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时,它会保持为零。有什么理由吗?我该如何解决这个问题?

3 个答案:

答案 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)

您应该使用++xx++x的值传递给递归调用而不增加,然后在调用方法的范围内递增,因此您将具有相同的x {1}}所有递归案例的值。

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

More on this topic.

答案 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);
}