Если мы передадим структуру данных, такую как вектор, используя вызов по значению в функцию, которая будет рекурсивно вызывать себя, то каждый раз, когда функция вызывает сама себя, копия структуры данных будет сохраняться в стеке функций. Рассмотрим пример -
void Util(int u, vector<int> a, vector<bool> &b)
{
// some code
for (int i=0; i<a.size(); i++)
if ( b[a[u]] == false)
Util(a[u], a, b);
}
Если нет никаких изменений, которые нужно сделать с вектором, разве не будет лучше вызывать по ссылке, а не по значению, чтобы минимизировать использование памяти при повторном копировании вектора? и снова в стеках функций. PS - Я принял во внимание, что использование вектора сведено к минимуму, так что даже мы используем вызов по ссылке, вероятность изменения вектора по ошибке сведена к минимуму.