Zur Abwechslung einmal eine iterative Version der Türme von Hanoi.
void Hanoi(int numberOfDisks, int startPeg, int endPeg) { int moves=(1<<numberOfDisks)-1, step=1, z, o; startPeg--; endPeg--; if(!(numberOfDisks&1)) endPeg=3-startPeg-endPeg; if((3+endPeg-startPeg)%3==1) step++; while(moves--) { for(z=moves, o=0; z&1; o++, z>>=1); if(o&1) printf("Move from peg %d to peg %d\n", endPeg+1, startPeg+1); else printf("Move from peg %d to peg %d\n", startPeg+1, endPeg+1); startPeg = (startPeg + step)%3; endPeg = (endPeg + step)%3; } } (I assume peg numbers range from 1 to 3, hence the startPeg-- and startPeg+1 etc...) -------------------------------------------------------------------------- Marcus Comstedt Lysator Academic Computer Society marcus@lysator.liu.se Linko"ping University, Sweden --------------------------------------------------------------------------
Design by comdes