Решение счетчика рекурсии в python - PullRequest
2 голосов
/ 20 июня 2011

Основная идея программы заключается в том, что она ищет большой список для заданной строки, отмечает ее индекс и назначает другие слова на основе этого индекса.Основная проблема заключается в том, что, поскольку в систему встроены некоторые требования, отклоняющие определенные слова, может возникнуть очень большая глубина рекурсии.Могут существовать решения, позволяющие обойти эту проблему (которую мне было бы очень интересно увидеть), вообще избегая рекурсии, но рекурсия представляется наиболее изящным решением, тем более что будет несколько версий этой программы, которые обрабатывают все больше и больше слови индексы.Поэтому главный вопрос заключается в том, как можно заставить его считать рекурсию, чтобы она могла выйти из функции, если достигнут предел глубины?В идеале это должно быть в цикле, чтобы оно могло начаться с того места, где оно остановилось после этого, но это, похоже, другая проблема.Так как счетчики сбрасываются неожиданно.

lines = open ('newkj')
corpus= []
for line in lines :
corpus.extend(line.split())

limit = 800000
globallimit=800000
count=0
count2=0

"""This one is unique as it carries the null case in it. It is also a forward facing no check function"""

def curgb (indexa=indexof('the'),count=0) :
    worda=wordfor (indexa)
    wordb = wordfor (indexa+1)
    indexb=indexof(wordb)
    wordc = wordfor (advance(indexa)+1)
    indexc=indexof (wordc)
    if indexa> globallimit:
        print ('no results')
        return (indexa)
    elif indexb<limit and indexc<limit:
        curgd (indexc,indexb,indexa,count2+1)
    else:
        curgb(advance(indexa),count+1)
"""This function is also forward facing no check"""

def curgd (indexc,indexb,indexa,count2=0):
    wordd = wordfor (indexc+1)
    indexd = indexof(wordd)
    indexd=check(indexd,indexb,-1)
    print(count2)
    if indexd<limit and indexc<limit and indexb< limit and wordfor(indexd-1)==wordfor(indexb):
        """print (wordfor(indexa),wordfor(indexb))
        print (wordfor(indexd),wordfor (indexc))
        print ('     ')"""
        curgd(advance(indexc),indexb,indexa,count2+1)
    else :
        curgb(advance(indexa),count+1)

На самом деле это упрощено и вряд ли достигнет предела рекурсии, но основная проблема сброса счетчика все еще остается.Запуск программы - это вызов curgb () с целочисленным аргументом, соответствующим данному индексу.

1 Ответ

1 голос
/ 20 июня 2011

Вы, кажется, смешиваете локальные и глобальные переменные.

В curgb, count2 переменная не определена, а в curgd, count переменная не определена. Либо используйте global keywork для доступа к ним, либо передайте обе переменные в качестве аргументов обеим функциям (чем позже вам следует заняться)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...