It doesn't really make any difference, except to your mental well-being.
Custom fields are saved in wp_postmeta alongside the id of the post the custom field belongs to.
If you have just one address field wpcf-address then when you save the address on a business post the field "belongs" to the business post, and when you save the 'same' address field on a restaurant post the field belongs to the restaurant post.
The context of the post determines whether it is "a business address", "a hotel address", or "a restaurant address".
If you create a Form to publish a business, there is no ambiguity about which post the address field refers to.
If you create a View to display businesses and output the address field in the Loop Output section, there is no ambiguity about which post type the address is coming from.
You can even create a View to display a mix of businesses, hotels, and restaurants, which outputs wpcf-address, and it will still output the correct field because although the loop might be outputting any one of businesses, hotels, or restaurants, it can only be outputting one post at any one time, and that post will unambiguously be a business, or a hotel, or a restaurant.
If you are outputting fields from a related post, again, the related post could in principle be a business, or a hotel, or a restaurant, but it can only be one of those, and so there is no confusion about which "kind" of address is being output.
If you use a conditional shortcode to test whether a post has an address, it is only testing one post at a time, and that post will know which address belongs to it.
So I would tend towards using a single address field, but for you I would say do whatever you are more comfortable with.