2017-04-07 5 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으로 유지됩니다. 이유가 뭐야? 이 문제를 어떻게 해결할 수 있습니까?인수 및 재귀 증가

+0

'x ++ '를'++ x'로 변경하면 어떻게되는지보십시오 – 4386427

+0

고마워요! 그 차이점은 무엇입니까? –

답변

1

당신은 그래서 당신이 모든 재귀 경우에 같은 x 값을가집니다, x의 값은 다음 호출 방법의 범위 내에서 증가, 증가하지 않고 재귀 호출에 전달 x++로, ++x을 사용해야합니다.

++의 위치는 증분의 타이밍을 결정하고, 귀하의 경우에는 메소드 호출에서 평가되기 전에 있어야합니다. 당신이 함수에 인수로의 증가하려고하기 때문에

More on this topic.

-1

귀하의 X는 증가되지 않습니다. 먼저 x를 늘린 다음 함수에 전달합니다. 그것은 당신의 문제를 해결할 수 있습니다. 당신이

foo(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

그래서 당신은 x++ 반환 x 다음은 x를 증가 말할 수

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

에 해당합니다. postfix increment라고합니다.

그래서 코드에서 당신은 당신이 할 경우 x

같은 값으로 함수를 호출 유지

foo(++x); 

그래서 당신은 말할 수

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

에 해당 ++xx을 증가시키고 x을 반환합니다. 접두어 증가라고합니다.