The first 2 are trivial, and left as an exercise to the reader.
Numbering the towers 1,2,3 where 2 is the starting tower:
move N moves a disk between tower (N mod 3)+1 and tower ((N+1) mod 3)+1
I gave this solution in a programming class that tried to teach recursive programming. It didn't follow the teacher's method, but I did answer the task, according to the limitations specified by the teacher.
I later did some more thinking, and found:
The disk number that is moved in move N is the lowest bit in N that is set (odd numbers, for example, have bit 1 set, so odd moves move disk 1 etc)
Odd numbered disks always move one way (in my above example, odd disks always move left) and even numbered disks the opposite way.
So, to put it in programming terms, assuming the function "reverse" reverses a string, "binary" converts a number to a string of "1"s and "0"s, and "move" is the number of the move:
disk=positionof("1",reverse(binary(move)))
tower1=(move mod 3)+1
tower2=((move+1) mod 3)+1
if (odd(disk)) then (tower1,tower2)=(tower2,tower1)
print "move ",move,": move disk ",disk," from tower ",tower1," to ",tower2
Enjoy