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