这是因为
copy_matrix
这里没有局部变量,所以它引用
nonlocal
第6行出现变量ie
copy_matrix = {}
,而
cur_max
它被定义为第24行的局部变量
cur_max = max(cur_max, copy_matrix[(r, c)])
,它引用的是非局部变量
copy_matirx
,
rows
,
columns
但它引用的是局部变量
cur_max
因为它是在函数中定义的,并且在赋值之前被引用。你可能想做的是
def dfs(r, c, prev):
nonlocal cur_max
if (r < 0 or c < 0 or
r == rows or c == columns or
matrix[r][c] <= prev):
return 0
if (r, c) in copy_matrix:
return copy_matrix[(r, c)]
max_length = 0
max_length = max(max_length, 1 + dfs(r + 1, c, matrix[r][c]))
max_length = max(max_length, 1 + dfs(r - 1, c, matrix[r][c]))
max_length = max(max_length, 1 + dfs(r, c + 1, matrix[r][c]))
max_length = max(max_length, 1 + dfs(r, c - 1, matrix[r][c]))
copy_matrix[(r, c)] = max_length
cur_max = max(cur_max, copy_matrix[(r, c)])
return max_length
read more