<?php

    
function move_tower($size$from$to$extra)
    {
        
/* check for invalid size */
        
if($size 1)
        {
            return 
FALSE;
        }

        
/* display orders given  */
            
echo "<li>";
            echo 
"<span class='function'>";
        echo 
"# Moving a tower of size {$size} from {$from} to {$to} using {$extra} as an extra storage point.";
            echo 
"</span>";
            echo 
"<ul>";

        
/* our ring of (size) is blocked by a tower of (.size - 1 
            lets move that tower from (from) to (extra) */
        
move_tower($size 1$from$extra$to);

        
/* move the ring, now when nothing is blocking it */
            
echo "<li>";
            echo 
"<span class='move'>";
        echo 
" * Moving ring {$size} from {$from} to {$to}";
            echo 
"</span>";
            echo 
"</li>";

        
/* put back the tower of (size - 1) on top of the ring
           by moving it from (extra) to (to) */
        
move_tower($size 1$extra$to$from);

            echo 
"</ul>";
            echo 
"</li>";
    }

    
/* exemple of a tower move */

        
echo "<style>.function {color: gray;}</style>";
        echo 
"<ul>";
    
move_tower(3'Left''Right''Middle');
        echo 
"</ul>";

    
/* display code  */

    
echo "<hr />";

    
highlight_file(__FILE__);

?>