2017-09-21 3 views
0

プログラムをバイナリプログラムのreturn文の計算を理解するカントしかし、私はは</p> <p>は、それが正常に動作している再帰とCに再帰でバイナリ変換の

は、いずれかに私を助けることができる1文の意味を理解カント以下を説明する

return(num%2)+ 10 * binary_conversion(num/2); 13の入力を持っている間

これはnum = 13のように混乱しています。 13%2 = 1 + 10 * 6 = 66、

int binary_conversion(int); 

int main() 
{ 
    int num, bin; 

    printf("Enter a decimal number: "); 
    scanf("%d", &num); 
    bin = binary_conversion(num); 
    printf("The binary equivalent of %d is %d\n", num, bin); 
} 

int binary_conversion(int num) 
{ 
    if (num == 0) 
    { 
     return 0; 
    } 
    else 
    { 
     return (num % 2) + 10 * binary_conversion(num/2); 
    } 
} 
+0

「binary_conversion(6)」は、あなたを混乱させる例では6となると思いますか?その呼び出しの再帰的ロジックを追跡すると、実際には '110'を返します。したがって、最上位レベルの計算は、実際には13のバイナリ表現である '1 + 10 * 110 = 1 + 1100 = 1101'になります。なぜ' binary_conversion(6) 'が' 110 '。途中で、引き数3、1、0を使って 'binary_conversion()'を再帰的に呼び出す必要があることがわかります。引数を6にして13を解決する必要があるのと同じです。 – pjs

答えて

0

あなたの混乱は、再帰の動作を理解しないから生じる計算のような愚かなもの。関数をのprintとインタビューするときです。これにより、ルーチンの制御とデータフローに従うことができます。

int binary_conversion(int num) 
{ 
    printf("ENTER num = %d\n", num); 
    if (num == 0) 
    { 
     printf("BASE CASE returns 0\n"); 
     return 0; 
    } 
    else 
    { 
     printf("RECURSION: new bit = %d, recur on %d\n", num % 2, num/2); 
     return (num % 2) + 10 * binary_conversion(num/2); 
    } 
} 
+0

まだ何も取得できませんbinary_conversion(6)を使うと、110? –

+0

答えに感謝しますが、あなたは私をクリアしますか?binary_conversion(6)yields 110 –

+0

はい、正しいです。それともあなたはまだ混乱していますか?その場合は、デバッグ実行の出力とその出力があなたを混乱させる特定の方法を表示してください。これらの更新は元の質問に反映されるはずです。 – Prune

関連する問題