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