
From Tower of Hanoi to Counting Bits (2011) - datanerd
https://susam.in/blog/from-tower-of-hanoi-to-counting-bits/
======
tromp
We can actually solve Towers of Hanoi non-recursively by manipulating bits:

    
    
        max = 1 << no_of_discs;
        for (x = 1; x < max; x++)
            printf("move a disc from %d to %d\n", (x&x-1)%3, ((x|x-1)+1)%3);
    

where x&x-1 is smaller than x as much as (x|x-1)+1 is larger than x, by a
2-power corresponding to the least significant 1-bit in x.

~~~
bear8642
Could you explain why that's true? - get that it works but don't understand
why

~~~
tromp
I never constructed a proof either, but it would rest on the observation that
the i'th smallest disc (i=1..no_of_discs) moves every 2^i-th step in the same
direction (+1 mod 3 for odd i and -1 mod 3 for even i).

------
dirtydroog
> It takes O(n*n) time to add the n integers.

Eh?

~~~
saagarjha
The time complexity assumption for addition is given earlier in the article.

