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