Actually, your server should be setup to determine whether the request is a directory and then select the DirectoryIndex from that directory. In other words, complain to your host (first).
Then, to show your host that you’re smarter than they are, REMOVE the useless RewriteBase directive, test for the request being a directory THEN redirect to add the trailing /, i.e.,
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .? http://www.example.com%{REQUEST_URI}/ [R=301,L]
When you create a specification, you can see the clearest path to actually writing the code. You wanted to add the trailing / to a directory request so that should have been your test and everything else just falls into place.