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

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

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

Вот мой код, но он рабочий только для нерекурсивной функции. Прошу помощи
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct List
{
    int info;
    struct List* next;
} List;
List *First, *Last;
void push(int inf)
{
    struct List* el;
    el = (struct List*)malloc(sizeof(struct List));
    if (el == NULL)
    {
        printf("Не удалось выделить память под элемент списка.\n");
        return;
    }
    el->info = inf;
    el->next = NULL;
    if (First == NULL)
        First = Last = el;
    else
    {
        Last->next = el;
        Last = Last->next;
    }
}
 
int minimum(int inf) //не рекурсия 
    {
  List *el = First;
  int min = el ->info;
  for (el; el != NULL; el = el->next)
  {
     if (el->info < min)
     {
         min = el->info;
         el = el->next;
     }
  }
  printf("\nMin = %d ", min);
 return min;
}
int minrec(int inf) //рекурсия (неверная)
{
    List *el = First;
    int min=el ->info;
    if (el = NULL)
        return inf;
    if (minrec(min)<el->info)
    {
        minrec(min)==el->info;
        el = el->next;
        printf("\nРекурсия = %d ", minrec(inf));
    }
    return min;
}
 
int main(void)
{
    int inf, sum;
    List *el, *tmp;
 
    setlocale(LC_ALL, "Russian");
 
    First = Last = NULL;
 
    printf("Введите элементы списка (окончание ввода -- любой символ, кроме цифры):\n");
    while (scanf("%d", &inf) != 0)
        push(inf);
    //minimum(inf);
    minrec(inf);

    for (el = First; el != NULL;)
    {
        tmp = el;
        el = el->next;
        free(tmp);
    }
    return 0;
}

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

textual
Листинг программы
int mine(List* head) { 
    if (head->next == NULL) {
        return head->info;
    }
    if (head->info < mine(head->next)) {
        return head->info;
    } 
}

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

В данном коде реализуется рекурсивный алгоритм поиска минимального элемента в списке.

  1. mine(head) - название функции, которая принимает в качестве аргумента указатель на голову списка head.
  2. if (head->next == NULL) - проверка на базовый случай, когда список пуст, в этом случае функция возвращает значение head->info, так как это единственный элемент в списке.
  3. if (head->info < mine(head->next)) - проверка на случай, когда текущий элемент меньше результата вызова функции mine для следующего элемента списка. В этом случае функция возвращает текущее значение head->info.
  4. В остальных случаях функция вызывает саму себя, передавая в качестве аргумента указатель на следующий элемент списка head->next. Таким образом, алгоритм работы функции mine заключается в последовательном сравнении текущего элемента списка с минимальным значением в оставшейся части списка. Если текущий элемент меньше, то он и будет минимальным, в противном случае функция продолжит поиск в следующем элементе списка.

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


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

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

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