Почему можно вызвать функцию в ее определении?

У нас есть функция foo():

 bool foo(int a)
    {
        if (a == 3)
        {
            foo(a+1);
        }
        return false;
    }

Почему мы можем ее вызвать прямо в определении?


Ответы (1 шт):

Автор решения: αλεχολυτ

Вызов функции из самой себя называется рекурсией. Понятно, что для обеспечения работоспособности такого кода должно быть достижимо условие завершения рекурсии. Иначе (при заведомо ограниченном объеме памяти) программа грохнется с переполнением стека (Stack overflow).

Для С++ рекурсивный вызов разрешён для любых функций кроме main. Ссылка на черновик стандарта:

Recursive calls are permitted, except to the main function

→ Ссылка