Несмотря на то, что это рекурсия, которая не заканчивается и поэтому по определению недействительна, я не понимаю, почему она segfaults (gcc 4.4.3 и clang 1.5 (trunk)).
Ответ 1
Поскольку каждый раз, когда он вызывает себя, он выделяет немного пространства стека; в конечном итоге он исчерпывает пространство стека и segfaults. Тем не менее, я немного удивлен, что это связано с segfault; Я бы ожидал (барабан) переполнение стека!
преобразует рекурсию в хвостовой рекурсивный вызов, иначе называемый бесконечным циклом!
Ответ 4
это рекурсия без базового регистра, что приводит к переполнению стека
Ответ 5
Это приводит к переполнению стека, который диагностируется как segfault в вашей системе.
Ответ 6
Каждый вызов функции добавляет в стек, и эти записи удаляются из стека при выходе из функции.
Здесь мы имеем рекурсивный вызов функции, который не имеет условия выхода. Таким образом, его бесконечное количество функций вызывает одно за другим, и эта функция никогда не выходит и не удаляется из стека, и это приведет к переполнению стека.