Переделать программу с использованием рекурсии - 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;
}

Объяснение кода листинга программы

Список элементов:

  1. Задача программы: реализовать алгоритм преобразования числа в систему счисления с использованием рекурсии.
  2. Используемый язык программирования: C.
  3. Пределенные переменные:
    • outv: переменная для хранения результата преобразования числа.
    • n: переменная для хранения исходного числа.
    • base: переменная для хранения основания системы счисления.
    • buf: указатель на буфер, в который будет записано преобразованное число.
  4. Условие начала рекурсии: n < 1.
  5. Действия в рекурсивной функции:
    • Вычисление остатка от деления n на base.
    • Деление n на base.
    • Присваивание значения переменной outv: если outv меньше 10, то в качестве значения используется символ '0' + outv, иначе в качестве значения используется символ 'A' - 10 + outv.
    • Рекурсивный вызов функции xx с аргументами outv, n, base, buf.
  6. Условие выхода из рекурсии: достижение базового случая (n < 1).
  7. Действия после выхода из рекурсии:
    • Запись значения outv в буфер, начиная с последнего символа.
  8. Вывод результата: преобразованное число.
  9. Установка кодировки консоли в 1251.
  10. Ввод исходных данных: число и основание системы счисления.
  11. Инициализация переменной outv значением введенного числа.
  12. Инициализация указателя p для работы с буфером.
  13. Установка значения последнего элемента буфера в '\0'.
  14. Рекурсивный вызов функции xx с аргументами outv, n, base, &p.
  15. Вывод преобразованного числа.
  16. Возврат 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы