if ( ! function_exists

The child theme functions.php is actually loaded first (this is intentional and desired behaviour.) So despite the function_exists check in your child theme, it will achieve nothing, as it seems the parent theme does not have this wrapper and is loaded second, so a fatal error occurs.

There is no easy way to override a parent theme function (if it hasn’t made all of it’s functions pluggable by default – mine does but few do!) Sometimes the parent theme function is hooked to an action, and you can remove the function from the hook (using remove_action) and then then add your own custom function (using add_action). Other times (even more rarely) there is a filter available in the existing theme code.

Other that that you will have to get more creative by copying the relevant parent theme template(s) to your child theme and modifying it/them to change the function called to your custom one, or hook that is fired – as child theme templates are used instead of parent theme ones. But remember, both child and parent functions.php are loaded.