O>>O>>private static void ProcessCell(int[,] mtrx, int x, int y)
O>> {
O>> ...
O>> if(x+1 < mtrx.GetLength( 0 ))
O>> ProcessCell( mtrx, x+1, y );
O>> else if(y + 1 < mtrx.GetLength( 1 ))
O>> ProcessCell( mtrx, 0, y + 1 );
O>> }
O>>
S>Даже не глядя на деструктор, первый рекурсивный вызов не в хвосте, т.к. за ним условие else-if-а.
Да ну? Во первых зайдя в блок if мы уже в else if не попадем и рекурсивный вызов ProcessCell будет "последней" операцией.
Я не подумал про такие придирки, но что ли трудно переписать? Вычислить новый x и y до вызова или в "самом вызове" ProcessCell.