The reason I claimed mine solution to be more efficient was that it didn't need to check all the numbers already picked to make sure that the newly-selected number had already been chosen. Checking through the generatedNums array takes linear time (O(len) where len is the length of generatedNums), and this needs to be done n times. This works out at a running time of O(n^2) (if I understand that correctly).
My method creates an array at a running time of O(high-low), then choosing the numbers in linear time O(n) giving a total running time of O(n+high-low) (again, I think), but it obviously uses more memory than your solution.
I wouldn't expect my solution to run faster than yours with these numbers (n = 10, etc.) but as n increases to a much larger number, I would expect mine to run much quicker. This is, of course, ignoring the fact that your program theoretically could take an infinite running time if if keeps selecting numbers that have already been chosen.