Переделать программу с использованием рекурсии - C (СИ)

Узнай цену своей работы

Формулировка задачи:

как сделать с помощью рекурсии?
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <windows.h>
  4. int main()
  5. {
  6. SetConsoleCP(1251); SetConsoleOutputCP(1251);
  7. int n = 0, _base = n;
  8. printf("Введите число:"); scanf_s("%d", &n);
  9. printf("сист счисл"); scanf_s("%d", &_base);
  10.  
  11. int outv = 0;
  12. for (int i = 0; n >= 1; i++)
  13. {
  14. outv += (n % _base) * pow(10., i);
  15. n /= _base;
  16. }
  17. printf(" base = %d outv = %d\n", _base, outv);
  18. }
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <windows.h>
  4.  
  5. int xx(int i, int outv, int n, int base)
  6. {
  7. if (n < 1)
  8. return 0;
  9. if (n >= 1)
  10. {
  11. outv += (n % base) * pow(10., i);
  12. n /= base;
  13. printf("%d", outv);
  14. return xx( --i, outv, n , base);
  15. }
  16. }
  17.  
  18. int main()
  19. {
  20. SetConsoleCP(1251); SetConsoleOutputCP(1251);
  21. int n = 0, base=0, i=0;
  22. printf("В число:"); scanf_s("%d", &n);
  23. printf("В сист числ"); scanf_s("%d", &base);
  24. int outv = 0;
  25. xx(i, outv, n, base);
  26. printf("\n");
  27. }
помогите исправить

Решение задачи: «Переделать программу с использованием рекурсии»

textual
Листинг программы
  1. void xx(int outv, int n, int base, char **buf)
  2. {
  3.     if (n < 1)
  4.         return;
  5.  
  6.     outv = n % base;
  7.     n /= base;
  8.    
  9.     *(--*buf) = outv < 10 ? '0' + outv : 'A' - 10 + outv;
  10.  
  11.     xx(outv, n, base, buf);
  12. }
  13.  
  14.  
  15. int main()
  16. {
  17.     SetConsoleCP(1251); SetConsoleOutputCP(1251);
  18.     int n = 0, base=0;
  19.     char buf[10], *p;
  20.    
  21.     printf("В число:"); scanf("%d", &n);
  22.     printf("В сист числ:"); scanf("%d", &base);
  23.     int outv = n;
  24.    
  25.     p = &buf[9];
  26.     *p = '\0';
  27.  
  28.     xx(outv, n, base, &p);
  29.    
  30.     printf("%s\n", p);
  31.    
  32.     return 0;
  33. }

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы