Skip to main content
 首页 » 编程设计

python之python中的递归计数器解决方案

2025年05月04日9kevingrace

该程序的基本思想是它在一个大列表中搜索给定的字符串,记下它的索引,并根据该索引分配其他单词。主要问题是,由于系统中内置了一些拒绝某些词的要求,因此可能会出现非常大的递归深度。可能有通过完全避免递归来规避这个问题(我很想看到)的解决方案,但递归似乎是最优雅的解决方案,特别是因为这个程序会有多个版本,可以处理越来越多的单词和索引。因此,主要问题是,如何让它计算递归,以便在达到深度限制时踢出函数?理想情况下,这将是一个循环,这样它就可以从它停止的地方开始,但这似乎是一个不同的问题。实际上,计数器正在意外重置。

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() 的问题,对应于给定的索引。

请您参考如下方法:

您似乎在混合局部变量和全局变量。

在 curgb 中,count2 变量未定义,在 curgd 中,count 变量未定义定义。要么使用 global keywork 来访问它们,要么将两个变量作为参数传递给两个函数(后者是你应该做的)