Iterators in Python allow iteration over iterable objects like lists, tuples, dicts and sets. An iterator is initialized using the iter() method and iterates using the next() method. For loops internally use iter() and next() to iterate. Custom iterators can also be defined by implementing the __iter__() and __next__() methods. Some key differences between recursion and iteration are that recursion involves function calls while iteration uses loops, and recursion has greater overhead. Common algorithms like factorial, Fibonacci sequence and Tower of Hanoi can be implemented using both recursion and iteration.