I think throw is the worst thing that ever happened to programming, and that early returns encourage bad practices. Were I a manager I would forbid both, relaxing the latter only for parameter validation and only for those whose work showed they actually understood the reasoning.
Procedural, functional, bah. This is buzz. I understand that there are principles underlying these distinctions but I think they are of little value in practice; of the other hand the OOP partitioning of interface and implementation was revolutionary.