How right you are, thanks!
You should escape the dot in your regex otherwise it matches any character.
isLockNessMonster('3950') // => true
Going to be pedantic, but this will throw an error if job.maxSalary or candidate.minSalary is a falsy value, which is not what the spec ("If either the candidate's minimum salary or the job's maximum salary is not present, throw an error.") says.
What about those unpaid internships that'll give you "experience" and "get your name out there"?
Also, in this case it doesn't matter at all because the answer already becomes infinity well before n = 1000. You're just not going to supply a number bigger than recursion limit (which is typically at least a few thousand).
n = 1000