2017-02-06 10 views
-1

私はC言語の新人です。再帰を使用して整数の数字を逆転させようとしています(たとえば、123は321になります)。 reverseDigitsというvoid関数を使って結果を出力する必要もあります。関数は正常に数値を反転させる、私の問題は、私が結果を印刷しようとすると、複数回印刷されます。たとえば、「321」だけを印刷する代わりに、「321 321 321」を印刷します。私は数字に数字が入っているので、結果が表示されていることに気づいた。 「12」は「21 21」を出力し、「123」は「321 321 321」を出力する。私はこれが起こる原因を突き止めることはできません。一度印刷するだけでいいです。これが起こる原因は何ですか? main関数のreverseDigits(123)は、その番号が入力された場合の結果を確認するためだけにあり、最終的なプログラムには含まれません。 (それが関連しているかどうかはわかりません)。Cの再帰を使用した数字の逆数

#include <stdio.h> 
#include <stdlib.h> 

int reverse=0; 
void reverseDigits(int number){ 
    int remainder; 
    if (number!=0){ 
    remainder = number % 10; 
    reverse = (reverse*10)+remainder; 
    reverseDigits(number/10); 
    printf("%i ",reverse); 
    } 
} 

int main() { 
reverseDigits(123); 

return 0; 
} 
+0

[div() '関数](http://pubs.opengroup.org/onlinepubs/9699919799/functions/div.html)を使用すると、1回の操作で商と剰余を見つけることができます。 –

答えて

1

ここでprintf("%i ",reverse);を指定すると、再帰の各レイヤーごとに印刷されます。 3回繰り返すと(3桁の数字の場合)、3回印刷されます。あなたは、あなたの再帰の一番下に印刷する必要があります:

if (number!=0){ 
    ... 
} else { 
    printf("%i ",reverse); 
} 

Here is a live example.

リトルサイドノートを:デバッガ次回を使用してください。小さなプログラムが動作しない理由を理解するのがずっと簡単になります。

関連する問題