|
Функции и структура программДругой хороший пример рекурсии, это quicksort, алгоритм сортировки, разработанный CAR Hoare в 1962 году. Имея массив, выбирается один элемент и остальные розбивается на две группы - те, которые меньше выбранного элемента и те, которые больше или равны ему. То же самое затем применена рекурсивно к этим двум группам. Когда подгруппа осталась с мешне чем двумя элементами, она не требует никакого сортировки; это останавливает рекурсию. Наша версия quicksort не является самой быстрой из возможных, но это одна из самых простых. Мы используем средний элемент каждой части массива для дальнейшего разделения. / * Qsort: сортирует v [left] ... v [right] в возрастающей последовательности * / void qsort (int v [], int left, int right) { int i, last; void swap (int v [], int i, int j); if (left> = right) / * ничего не делать, если массив * / return; / * содержит менее двух элементы * / swap (v, left, (left + right) / 2); / * переместить элемент разделения * / last = left; / * к v [0] * / for (i = left + 1; i <= right; i + +) / * поделить * / if (v [i] swap (v, left, last) / * восстановить элемент разделения * / qsort (v, left, last-1); qsort (v, last +1, right); } Мы переместили операцию перестановка в отдельную функцию swap, поскольку она происходит три раза в qsort. / * Swap: поменять местами v [i] и v [j] * / void swap (int v [], int i, int j) { int temp; temp = v [i]; v [i] = v [j]; v [j] = temp; } Стандартная библиотека включает собственную версию qsort, способную сортировать объекты любого типа. Рекурсия может занимать место, так где-то нужно удерживать стек значений для обработки. Также она не является быстрой. Но рекурсивный код компактнее и часто намного проще в написании и понимании, чем не-рекурсивный эквивалент. Рекурсия особенно удобна для рекурсивно-определенных данных, например древовидных структур. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10 Продолжение статьи: ч.11 Продолжение статьи: ч.12 Продолжение статьи: ч.13 Продолжение статьи: ч.14 Продолжение статьи: ч.15 Продолжение статьи: ч.16 Продолжение статьи: ч.17 Продолжение статьи: ч.18 Продолжение статьи: ч.19 Продолжение статьи: ч.20 Продолжение статьи: ч.21 Другие статьи по теме: - Типы, операторы и выражения- Символьные массивы - Внешние переменные и область действия - Функции и структура программ - Введение в c++ |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |