Codice:
def positionOfGreatestLowerOrEqualThan( matrix, value, rowmin, colmin, rowmax,colmax ):
i = rowmin
j = colmin
while i < rowmax and j < colmax and matrix[i][j] <= value:
i+=1
j+=1
return [i,j]
def findNumber( matrix, value, rowmin, colmin, rowmax, colmax ):
if rowmin == rowmax or colmin == colmax:
return False
[i,j] = positionOfGreatestLowerOrEqualThan( matrix, value, rowmin, colmin, rowmax, colmax )
if matrix[i-1][j-1] == value:
return [i-1,j-1]
return findNumber( matrix, value, rowmin, j, i, colmax ) or findNumber( matrix, value, i, colmin, rowmax, j )
Per pigrizia la ricerca sulla diagonale l'ho fatta lineare, ma basta modificare la prima funzione

.