Combinations in application - "smooth order" I have a long winded question here, so I will state the final question first - then my long explanation: 
Is there a program, method, code, calculation in which I can determine a complete "smooth" order of all combinations for any number (other than brute force method)?
I'm a composer and haven't delved deeply in this kind of math for many years and as I'm sure many of you know there is a lot of math in music. Perhaps fewer may know that combinatorially has been used as a widely-used tool in music composition for at least 50-60 years - albeit no longer in vogue. I've been using this field for my "pre-compositional" process myself for a few years and I've got the basic math down - that is to use:
\begin{align} 
2^n-1
\end{align}
for the number of elements I'm combining and to use Pascal's triangle to double check numbers of combinations of lesser numbers within the big"N" and to not subtract 1 if I want silence etc. etc. But what I do next I have only been using the brute force method and have taken entire summers to come up with one out of what may be dozens of viable answers. That is to order the each individual in "smooth order" in a way that every single combination is visited upon. (complete smooth order - if that helps)
"Smooth order" is my best way to describe it although I'm sure there is a better word, phrase and/or name of process in the math world to put it. What I mean is that the next set should always be only 1 element different- 1 less or 1 more than the one preceding or following it. Let's say if I'm combining 3 elements that it could possibly be: a-ab-b-bc-abc-ac-c
All combinations are met and all are in "smooth order" - now how can I do this without the brute force method for say the number 12 - for example?
Thanking you brilliant people in advance!,
Scroitter
 A: To create a recursive algorithm, let's say we already have a smooth order of combinations.  Now we want to add another letter into the mix.  This means we will end up with twice the number of combinations we had before (since our new letter can be either included or excluded from any combination in the previous smooth order).
So I start by "doubling" the previous smooth row.  Using your example smooth order of 
$a-ab-b-bc-abc-ac-c$, I get:
$$a-a-ab-ab-b-b-bc-bc-abc-abc-ac-ac-c-c$$
Now I want to add a "d" to half of these, so to preserve smoothness, I add a "d" to the 2nd and 3rd, but skip the 4th and 5th, add a "d" to the 6th and 7th, but skip the 8th and 9th, etc...  Basically starting with the second "a", I add 2 "d"s, skip 2, and repeat.
This gives me
$$a-ad-abd-ab-b-bd-bcd-bc-abc-abcd-acd-ac-c-cd$$  
The only combination missing from this strategy is adding "d" by itself, so I add that to the end to get:
$$a-ad-abd-ab-b-bd-bcd-bc-abc-abcd-acd-ac-c-cd-d$$
Which is a smooth order, as desired.  In this way you can turn one smooth order into a larger one (so starting with a single letter or a starting smooth order you can build up to as many letters as you want).
A: Your set of "all combinations for the number $n$" is the same as the set of all subsets of $[n]$, or the set $B_n:=\{0,1\}^n$ of all binary strings of length $n$. The latter can be identified with the set of vertices of the $n$-dimensional hypercube $[0,1]^n$. So what you are after is a Hamiltonian circuit on the hypercube. See here:
http://en.wikipedia.org/wiki/Hypercube_graph
