Хорошо, поэтому функция, когда она получает первый вызов, вектор выглядит так: [9 8 10 8]. Затем он сравнивает 9 с 10 (элемент в поиске). Поскольку они не равны, функция выполняет рекурсивный вызов, но с новым вектором, [8 10 8]. в этот момент у нас в стеке есть первый вызов. Назовем его C1.
Затем он сравнивает 8 с 10 (элемент в поиске). Поскольку они не равны, функция выполняет рекурсивный вызов, но с новым вектором, [10 8]. в этот момент у нас в стеке есть второй и первый вызов. Назовем его C2 C1.
Затем он сравнивает 10 с 10 (элемент в поиске). Поскольку они равны, функция возвращает 0. Итак, в нашем стеке функция C2 получает в результате 0. Поскольку он отличается от -1, он возвращает 1 вызову C1. Поскольку 1 не равно -1, он возвращает 2, оставляя правильный результат.