В данном видео я обсужу решение Марии Мацько (вместе с ней) следующей задачи:
Напишите рекурсивную функцию, находящую минимум в массиве.
Мария использовала для задания массива два итератора - на первый элемент и после последнего элемента [first, last) .
Это в целом наиболее характерный именно для C++ способ передачи в функцию произвольного контейнера (точнее произвольного диапазона).
Для хранения уже накопленного минимума она использовала вспомогательный параметр smallest - таким образом получилась хвостовая рекурсия.
В данном отрывке я рассказываю, что такое вообще хвостовая рекурсия, демонстрирую, как она связана с циклом, и в конечном итоге показываю, как можно было сделать рекурсивную функцию, принимающую только два итератора first и last и не требующую вспомогательного параметра.
Я не говорю, лучше или хуже подобная рекурсия - но желательно и ее тоже уметь написать (так же, как уметь и хвостовую рекурсию писать тоже полезно).
Вот получившийся код:
Замечу, что мне пришлось переименовать функцию в min2, иначе у меня возникала путаница со стандартной функцией min (опять же из-за нехорошей, но удобной, конструкции using namespace std;) - это не попало в видео.
Источник: rutube.ru