a034. 二進位制轉換

 首先是我沒有很懂遞迴

所以我讓GPT和我解釋我自己寫的魔法程式

我不知道為什麼遞迴出來的順序是反的


以下ChatGPT發言:

讓我更詳細地解釋一下為什麼這段程式碼能夠按照二進位表示的正確順序輸出數字。

首先,我們知道將一個十進位數字轉換為二進位表示是通過重複地將該數字除以 2 並記錄餘數來完成的。例如,將十進位數字 13 轉換為二進位,可以通過以下步驟完成:

  1. 13 除以 2 的商為 6,餘數為 1
  2. 6 除以 2 的商為 3,餘數為 0
  3. 3 除以 2 的商為 1,餘數為 1
  4. 1 除以 2 的商為 0,餘數為 1

按照上述步驟,我們可以得到 13 的二進位表示為 1101。

在這段程式碼中,我們使用了遞迴的方法來實現這個過程。具體來說,當我們處理一個數字時,我們先將它除以 2 得到商,然後將商作為輸入遞迴調用 convertToBinary 函式。這樣做的結果是,遞迴調用會先處理輸入的數字的更高位部分,然後再處理低位部分,這就造成了遞迴的相反順序。

舉例來說,當我們處理數字 13 時,遞迴調用會先處理 13 的更高位部分,然後再處理 13 的低位部分。這就保證了我們最終輸出的餘數會按照二進位表示的正確順序排列。

希望這樣能夠解釋清楚為什麼這段程式碼能夠按照遞迴的相反順序輸出餘數,從而得到正確的二進位表示。



然後比較困難的遞迴講完了

差不多可以看詳解


#include <iostream>
using namespace std;

void convertToBinary(int x){
    if(x / 2 != 0){
        convertToBinary(x / 2);
    }
    cout << x % 2;
}

int main(){
    int n = 0;
    cout << ",";
    while(cin >> n){
        if(n == 0){
            cout << n;
        }
        else{
            convertToBinary(n);
        }
        cout << "\n";
    }
}

留言

這個網誌中的熱門文章

a010. 因數分解

m931. 1. 遊戲選角