Сколько раз функция может вызвать саму себя и от чего это зависит
Сколько угодно - но пока ей позволяет память.
Каждый вызов требует в общем случае место в стеке для хранения адреса возврата и локальных переменных (включая переданные аргументы).
Естественно, всякие частные случаи и оптимизации могут влиять на указанное количество необходимой для одного вызова памяти.
Смотря какая функция. Вы можете регулировать количество вызовов ставя условие (или утверждение) или генерировав исключение. Например такая функция:
void foo() {
static int k = 1;
if (k++ > 2) return;
cout << k <<' ';
foo();
}
Может вызвать саму себя всего один раз...
Продвижение своими сайтами как стратегия роста и независимости