2017-04-07 65 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。它被稱爲前綴增量。