Поиск минимального элемента в списке рекурсией - 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; } }
Объяснение кода листинга программы
В данном коде реализуется рекурсивный алгоритм поиска минимального элемента в списке.
mine(head)
- название функции, которая принимает в качестве аргумента указатель на голову спискаhead
.if (head->next == NULL)
- проверка на базовый случай, когда список пуст, в этом случае функция возвращает значениеhead->info
, так как это единственный элемент в списке.if (head->info < mine(head->next))
- проверка на случай, когда текущий элемент меньше результата вызова функцииmine
для следующего элемента списка. В этом случае функция возвращает текущее значениеhead->info
.- В остальных случаях функция вызывает саму себя, передавая в качестве аргумента указатель на следующий элемент списка
head->next
. Таким образом, алгоритм работы функцииmine
заключается в последовательном сравнении текущего элемента списка с минимальным значением в оставшейся части списка. Если текущий элемент меньше, то он и будет минимальным, в противном случае функция продолжит поиск в следующем элементе списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д