Переделать функцию в рекурсивную - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д