The NCO is a cyclical counter that can go on indefinitely but is otherwise similar to what you suggest in that you are increment n to set the output rate. It basically is a look up table of all the values in one complete cycle, and "wraps" on an overflow so that it will output continuous cycles with no discontinuity.
For memory optimization only a quarter cycle is needed since the remaining portions of the cycle can be derived from the first quarter cycle. There are many other memory optimizations as well but the view of one complete cycle both works in implementation if you were not concerned with memory, and is easy to visualize.
A little more theory may help you to see all the advantages (and simplicity) of an NCO, which I will add in an update to this.