One liner in JavaScript may look like:
function han(src, dst, aux, n) {if (n > 0) {han(src, aux, dst, n-1); console.log("%s => %s: %d", src, dst, n); han(aux, dst, src, n-1);}}
Or more verbose:
function han(src, dst, aux, n) { if (n > 0) { han(src, aux, dst, n-1); console.log("%s => %s: %d", src, dst, n); han(aux, dst, src, n-1); } }
Tests:
han("src", "dst", "aux", 1); han("src", "dst", "aux", 2); han("src", "dst", "aux", 3);
Example of output for n=3
:
src => dst: 1 src => aux: 2 dst => aux: 1 src => dst: 3 aux => src: 1 aux => dst: 2 src => dst: 1
Solution have such number of moves:
N(n) = 2^n - 1
Compare my implementation with http://interglacial.com/hoj/hoj.html
See also:
- https://en.wikipedia.org/wiki/Tower_of_Hanoi
-
Wikipedia description of mathematical task "Tower of Hanoi".