Переделать программу с использованием рекурсии - C (СИ)
Формулировка задачи:
как сделать с помощью рекурсии?
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- int main()
- {
- SetConsoleCP(1251); SetConsoleOutputCP(1251);
- int n = 0, _base = n;
- printf("Введите число:"); scanf_s("%d", &n);
- printf("сист счисл"); scanf_s("%d", &_base);
- int outv = 0;
- for (int i = 0; n >= 1; i++)
- {
- outv += (n % _base) * pow(10., i);
- n /= _base;
- }
- printf(" base = %d outv = %d\n", _base, outv);
- }
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- int xx(int i, int outv, int n, int base)
- {
- if (n < 1)
- return 0;
- if (n >= 1)
- {
- outv += (n % base) * pow(10., i);
- n /= base;
- printf("%d", outv);
- return xx( --i, outv, n , base);
- }
- }
- int main()
- {
- SetConsoleCP(1251); SetConsoleOutputCP(1251);
- int n = 0, base=0, i=0;
- printf("В число:"); scanf_s("%d", &n);
- printf("В сист числ"); scanf_s("%d", &base);
- int outv = 0;
- xx(i, outv, n, base);
- printf("\n");
- }
помогите исправить
Решение задачи: «Переделать программу с использованием рекурсии»
textual
Листинг программы
- void xx(int outv, int n, int base, char **buf)
- {
- if (n < 1)
- return;
- outv = n % base;
- n /= base;
- *(--*buf) = outv < 10 ? '0' + outv : 'A' - 10 + outv;
- xx(outv, n, base, buf);
- }
- int main()
- {
- SetConsoleCP(1251); SetConsoleOutputCP(1251);
- int n = 0, base=0;
- char buf[10], *p;
- printf("В число:"); scanf("%d", &n);
- printf("В сист числ:"); scanf("%d", &base);
- int outv = n;
- p = &buf[9];
- *p = '\0';
- xx(outv, n, base, &p);
- printf("%s\n", p);
- return 0;
- }
Объяснение кода листинга программы
Список элементов:
- Задача программы: реализовать алгоритм преобразования числа в систему счисления с использованием рекурсии.
- Используемый язык программирования: C.
- Пределенные переменные:
- outv: переменная для хранения результата преобразования числа.
- n: переменная для хранения исходного числа.
- base: переменная для хранения основания системы счисления.
- buf: указатель на буфер, в который будет записано преобразованное число.
- Условие начала рекурсии: n < 1.
- Действия в рекурсивной функции:
- Вычисление остатка от деления n на base.
- Деление n на base.
- Присваивание значения переменной outv: если outv меньше 10, то в качестве значения используется символ '0' + outv, иначе в качестве значения используется символ 'A' - 10 + outv.
- Рекурсивный вызов функции xx с аргументами outv, n, base, buf.
- Условие выхода из рекурсии: достижение базового случая (n < 1).
- Действия после выхода из рекурсии:
- Запись значения outv в буфер, начиная с последнего символа.
- Вывод результата: преобразованное число.
- Установка кодировки консоли в 1251.
- Ввод исходных данных: число и основание системы счисления.
- Инициализация переменной outv значением введенного числа.
- Инициализация указателя p для работы с буфером.
- Установка значения последнего элемента буфера в '\0'.
- Рекурсивный вызов функции xx с аргументами outv, n, base, &p.
- Вывод преобразованного числа.
- Возврат 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д