I'm unable to comment on current iterations of M$-based recovery software as I've not used any in years, however as a general practice I'd first duplicate the disk you want to recover (at bit-level) and attempt recovery on the duplicated disk. This ensures you don't irreversibly destroy data on the original.
As far as software is concerned, they generally work on similar principles, so a decent open-source version may well work similarly to a paid-for package, but in any event I guess it depends upon the value you place upon the 'lost' data. Many years ago I used a package on a M$ system called 'recuva', it seemed to do the job at the time, may be worth seeing if it's still around?
Finally, if I were attempting data recovery these days I'd use Linux, a 'live' distro could well do the job... have to go now but let me know if that's of any interest.
FP.