If I’d been given the “swap 2 values with no temp variable” problem before yesterday, I probably would have said “you can’t do it”.
Now that I’ve seen the trick (which isn’t a general solution. It only works for integers, and only those containing values that won’t overflow when added), I probably would have said “you shouldn’t”.
I’ve been developing software professionally for 18 years now, for fun about 9 years before that, and have at least 6 assorted Free or Public Domain projects under my belt. Does my “incorrect” answer to that question make me a bad programmer in your eyes? Given that your “correct” answer is something I’d slap someone for trying in any code I have to maintain, I think I’d prefer to not get that job anyway.
As for the issue about recursion, in my experience most software developers (even fairly good ones) are scared of it. I wouldn’t consider that a deal-killer for hiring. I was scared of it too, until I took a Lisp course in college. Its probably a better test of Lisp exposure than anything else.
On the other hand, if you are scared of it, be honest enough to admit it. Don’t throw me some (possibly true) pablum about explicitly using a stack being just as good, and faster in some cases.
If an algorithm is naturally recursive, recursion is probably the best expression of that. As for the speed issue, I agree that a good programmer doesn’t do things that are going to be massively slow. However, they also don’t pervert their source code for optimization purposes. That’s the compiler’s job. If the compiler fails, and you have a known speed problem, and you have tracked a big bottleneck down to that chunk of code, then you may source-level optimize. Otherwise, just make it as understandable as you can, please.
However, I would consider “I have trouble with recursion, and so does nearly every other developer who will have to maintain this code”, a compelling argument.