Переделать функцию в рекурсивную - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите, пожалуйста, как переделать эту функцию в рекурсивную?
int obr(int x)
{int ob=0;
    do{
    ob*=10;
    ob+=x%10;
    x/=10;
    }while(x>0);
return ob;
}

Решение задачи: «Переделать функцию в рекурсивную»

textual
Листинг программы
#include <stdio.h>
 
int rev(int x, int p)
{
    return x == 0 ? p : rev(x/10, p*10 + x%10);
}
 
int main()
{
    int r = rev(12345, 0);
    printf("%d\n", r);
    return 0;
}

Объяснение кода листинга программы

В данном коде присутствует функция rev, которая написана с использованием рекурсии. Её задача — перевести десятичное число в его обратное представление (справа налево). Используется два параметра:

  1. x — число, которое необходимо перевести.
  2. p — переменная-накопитель для сбора обратного представления числа. В основе функции лежит рекурсивный принцип: — Если x равно нулю, то возвращается значение p. — Если x не равно нулю, то: — Значение p умножается на 10 (для добавления последней цифры x). — Последняя цифра x добавляется к p. — Вызывается рекурсивно функция rev, передавая в неё значение x/10 (без последней цифры) и новое значение p. В функции main создаётся переменная r, которая содержит результат вызова функции rev с аргументами 12345 и 0. Затем с помощью функции printf выводится значение r.
  3. Переводим 12345 в обратное представление: — 54321 (первая цифра 1) — 5432 (вторая цифра 2) — 543 (третья цифра 3) — 54 (четвёртая цифра 4) — 5 (пятая цифра 5) — 0 (шестая цифра 0)
  4. Получаем обратное представление числа 12345, которое равно 054321.
  5. Выводим результат на экран: — 054321

Оцени полезность:

15   голосов , оценка 3.733 из 5
Похожие ответы