关于递归深度和函数内栈大小的问题,想讨论、求助一下...

swt2015 2016-12-07 10:51:11
如下是定义的一个函数,参数先忽略,实现的是根据参数指定范围:若满足判断条件则以循环来给线程赋参数,满不满足则递归一层,当输入参数改变递归层数和循环次数。功能能够实现,但是遇到一个问题:当参数较小(指递归深度“layerF”和循环再递归次数“for j in xrange(1,1+temp)”较小)时,程序能够正常实现功能,而当这两者之一或者同时增大时程序执行时就出现了逻辑错误(指非预期的错误,如多递归了一层),就想请问一下这是属于量变导致质变的错误,函数栈被塞满了,线程调用限制?还是代码本身有问题?
当递归深度为1时(不递归)循环生成线程数几百都没有问题;当递归深度为2,循环生成线程数大于36时就会异常,35以下都正常;当递归深度更深时,循环生存线程数异常的阈值就会更小。程序运行出问题时中没有达到最大层数等traceback,只有逻辑错误。

def DevThread(threads,paths,layerF,layerB,filenum,size,k,st):
if len(layerF)==1:
for i in xrange(1,(1+layerF[0])):
mkpath1=paths+'//Lev'+str(k+1)+'-'+str(i)
th=threading.Thread(target=intoDir,args=(mkpath1,layerB,filenum,size,k+1,))
threads.append(th)
else:
save=list(layerF)
temp=save.pop(0)
for j in xrange(1,1+temp):
dir=paths+'//Lev'+str(st)+'-'+str(j)
DevThread(threads,dir,save,layerB,filenum,size,k,st+1)
...全文
225 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
屎克螂 2016-12-08
  • 打赏
  • 举报
回复
没看懂你在说什么,反正我敢断定是你代码有问题,多看看参数变化

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧