2017-02-06 3 views
-1

Я новичок в C, и я пытаюсь использовать рекурсию для изменения цифр в целых числах (например, 123 становится 321). Мне также нужно распечатать результат, используя функцию void, называемую reverseDigits. Функция успешно меняет число, моя проблема в том, что когда я пытаюсь распечатать результаты, она будет печатать ее несколько раз. Например, вместо того, чтобы печатать только «321», он печатает «321 321 321». Я заметил, что он печатает результат, так как число цифр находится в числе. «12» выходов «21 21», «123» выходы «321 321 321» и т. Д. Я не могу понять, что вызывает это. Мне просто нужно его распечатать один раз. Что вызывает это? 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

Где вы имеете printf("%i ",reverse); вы будете печатать для каждого слоя вашей рекурсии. Если вы повторите 3 раза (т. Е. Для 3-значного номера), вы будете печатать 3 раза. Вы должны напечатать только в нижней части рекурсии:

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

Here is a live example.

Маленькая сторона Примечание: Используйте отладчик в следующий раз. Это намного легче понять, почему небольшие программы не работают.

Смежные вопросы