/** This program implements a recursive Towers of Hanoi solver. See: https://en.wikipedia.org/wiki/Tower_of_Hanoi */ /** Set up the recursive call for n disks */ hanoi[n] := hanoi[n, 1, 3, 2] /** The recursive call. */ hanoi[n, source, target, aux] := { if n > 0 { // move n-1 disks from source to aux, so they are out of the way // This inverts the target and aux stacks. hanoi[n-1, source, aux, target] // move the nth disk from source to target println["Move from $source to $target"] // target.push[source.pop[]] // move the n-1 disks that we left on auxiliary onto target // This inverts the source and aux stacks. hanoi[n-1, aux, target, source] } } hanoi[7]