要將 convert() 函式改寫為使用遞迴而不新增任何變數的函式,我們可以讓函式在每次遞迴呼叫時處理輸入數字的最低位。下面是使用遞迴實現 convert() 函式的 C 語言代碼:
c
Copy code
#include <stdio.h>
void convert(long m) {
if (m > 0) {
convert(m / 2); // 遞迴調用,先處理除以 2 的商
printf("%ld", m % 2); // 然後處理餘數,也就是當前的最低位二進制數
}
}
int main() {
long m;
scanf("%ld", &m);
printf("The binary value is: ");
if (m == 0) { // 處理 m 為 0 的特殊情況
printf("0");
} else {
convert(m);
}
printf("\n");
return 0;
}
在這個改寫的 convert() 函式中,我們沒有新增任何變數。如果 m 大於 0,我們先遞迴地調用 convert() 來處理 m 除以 2 的商,這樣可以保證最高位的二進制位先被處理。一旦到達遞迴的底部(當 m 變為 0 時),遞迴開始返回,並在每次返回的過程中打印出當前 m 對 2 取餘數的結果,也就是當前位的二進制值。
main 函式中有一個條件判斷,用於處理當輸入的數字為 0 時的特殊情況。這是必要的,因為如果輸入為 0,convert() 函式將不會打印任何東西,所以我們需要直接打印出 "0"。