Причины очень просты.
Пакет, формирующий отображение движения корабля (влом лезть в исходники за точным его названием и параметрами), требует два аргумента скорости - скорость движения на новом участке и скорость разворота.
Т.е., начиная двигаться из точки A в точку Б, и при этом имея нос, направленный не на Б, он начнёт двигаться в прежнем направлении и понемногу поворачивать носом к точке Б.
В результате, двигаться он будет не по прямой, а по дуге окружности, до тех пор, пока не повернёт на угол, смотрящий в сторону Б. После этого - пойдёт по прямой.
Однако, сервер перемещение считает по прямой.
Естественно, мало того, что координаты корабля у клиента и у сервера будут различаться, но отличие будет даже во времени прохождения маршрута! У клиента корабль проходит больший путь и поэтому придёт в контрольную точку с опозданием.
Правильное решение - написание формулы расчёта координат движущегося корабля, точно соответствующей клиентской.
… чтобы понять рекурсию, нужно сперва понять рекурсию …