To your first question:
The main advantage of recursion is the elegance and simplicity of the code. The main philosophy of recursion is break in pieces the problem until it gets small enough to solve. Take fibonacci (fibo(n)) recursive implementation for example. Is n < 1? return 1, is not? return the addition of the two fibos before. And that's all! The algorithm explains it self. Does the iterative implementation describes it self?
Main disadvantage of recursion: each recursive call requires memory, if your problem is too big the memory it requires grows quickly and may slow the execution.
Advantages of iteration: Execution time, memory usage.
Disadvantages of iteration: Is not as easy to read or implement. (Well, if it's easy to implement or not really depends on the approach you want to take and your skills).
To your second question: Yes. I remember my professo...