Я перехожу к решению для проблемы с наибольшим возрастанием подпоследовательности и замечаю, что глобальная переменная для максимального значения длины подпоследовательности переопределяется как в драйвере, выполняющем главную функцию, так и в качестве а также в фактической функции, которая вычисляет самую длинную последовательность суб:Использование глобальных переменных в функции python
# global variable to store the maximum
global maximum
def _lis(arr , n):
# to allow the access of global variable
global maximum
# Base Case
if n == 1 :
return 1
# maxEndingHere is the length of LIS ending with arr[n-1]
maxEndingHere = 1
"""Recursively get all LIS ending with arr[0], arr[1]..arr[n-2]
IF arr[n-1] is maller than arr[n-1], and max ending with
arr[n-1] needs to be updated, then update it"""
for i in xrange(1, n):
res = _lis(arr , i)
if arr[i-1] < arr[n-1] and res+1 > maxEndingHere:
maxEndingHere = res +1
# Compare maxEndingHere with overall maximum.And update
# the overall maximum if needed
maximum = max(maximum , maxEndingHere)
return maxEndingHere
def lis(arr):
# to allow the access of global variable
global maximum
# lenght of arr
n = len(arr)
# maximum variable holds the result
maximum = 1
# The function _lis() stores its result in maximum
_lis(arr , n)
return maximum
Казалось бы, что каждый раз, когда рекурсивный вызов выполняется, максимальное значение будет сброшено. Какова была бы цель переопределения глобальных переменных в локальной области функций?
Это значение должно быть просто передано в метод ... Может быть, стиль кодирования? Я думаю, что это плохая практика. Я наклоняюсь, если вы используете глобальную переменную, вы, вероятно, ошибаетесь ... – FirebladeDan
Ожидаете ли вы 'global' сбросить значение глобальной переменной? Я не вижу ничего, что я бы назвал «сбросом» максимума в '_lis'. – user2357112
@ user2357112, посмотрите чуть выше ** возврат **. – Prune