Здравствуйте.
Помогите пожалуйста дописать программку, совсем запуталась. Все просто и никак не могу сообразить как эту функцию переделать и вызвать в маин.
Задание: написать рекурсивную программу находящую максимальное число в связном списке.
Дана сама рекурсивная функция (из учебника) находящее это число:
| Код | Item max(Item a[], int l, int r) { if(l == r) return a[l]; int m = (l+r)/2; Item u = max(a, l, m); Item v = max(a, m+1, r); if (u > v) return u; else return v; }
|
Что у меня получается, создаю список:
| Код | struct List { int data; List*next; };
List* create_node(int dat = 0, List* nxt = NULL) { List* node = (List*)malloc(sizeof(List)); node->data = dat; node->next = nxt; return node; }
//вставка в начало списка List* insert_front(List* first_node, int dat) { return create_node(dat, first_node); }
// Вот пытаюсь создать рекурсивную функцию макс и что то делаю не правильно
List* find_max(List* list, int l, int r) //TODO { while(list != NULL) { if (l == r) return list; int m = (l+r)/2; List* u = max(list, l, m); List* v = max(list, m+1, r); if (u > v) return u; else return v; } }
void print_list(List* list) { printf("[ "); while(list != NULL) { printf("%d ", list->data); list = list->next; } printf("]\n"); }
int main() { List* list = NULL; print_list(list); // выводит: [ ] list = create_node(1); print_list(list); // [ 1 ] list = insert_front(list, 10); list = insert_front(list, 8); print_list(list); // [ 8 10 1 ]
// Здесь вызываю функцию и вывожу макс число List* node = find_max(...); //TODO print_list(list); }
|
Помогите написать правильно рекурсивную функцию с ее вызовом в маин.
|