Exceptions are a modern way of getting back the complexity in code we lost when goto got banned from the code bases. You can do really useful stuff with exceptions.
fun allocate_resource()
try
if (resource = allocate())
throw ResourceAllocatedException()
allocate_resource()
catch
return resource
And don’t forget to ? between the recursive calls. Aint she a beauty?