Почему не работает рекурсия в php?
Потому что в ветке условия else рекурсивный вызов функции никуда не возвращается.
Одно из необходимых требований рекурсии — обязательная возможность нерекурсивного выхода.
Это значит, что возврат из функции по какой-то проверке где-то должен идти до рекурсивного вызова.
В вашем коде такого случая нет.