Incremental Development – this approach entails dividing the application into a set of tasks. Then the tasks are developed in a linear or simultaneous fashion. With the latter approach each completed task must be integrated into the overall application. Once all the tasks are complete, the application can, in theory, ship.
Iterative Development – this approach entails the same tasks, however, instead of fully completing a task and moving on the next task, one would recursively revisits the same tasks each time evolving and refining the functionality.
To me incremental development feels more natural because I get to add value and then move to the next challenge. Iterative development can get laborious. That said if you are focused on gaining earlier user feedback, then iterative development is a better way to go. The user can get a feel for the system as a whole and can then provide feedback which is relevant and probably valuable. Of course not every task will require an equal amount of user feedback, thus the iterations should reflect this imbalance.