各位高手,请教:递归导致堆栈溢出问题(分不够再加)

junsunchen 2005-05-16 10:26:26
function parentmenu(id)
set rs=server.CreateObject("adodb.recordset")
sql="select * from USER_INFO where CREATE_SITE='"&id&"' and CONFIRM='Y' order by id"
rs.open sql,conn,1,1

while not rs.eof
if rs("parent_id") = id and rs("ISUPDATE")="0" then
ChildmenuCount = ChildmenuCount + 1
end if
ChildCount=conn.execute("select count(*) from USER_INFO where CONFIRM='Y' and CREATE_SITE='"&rs("USER_ID")&"'")(0)
if ChildCount=0 then

else
parentmenu rs("USER_ID")
end if
rs.movenext
wend
rs.close
set rs=nothing
end function
堆栈溢出
过程嵌套太深。每次代码从一个过程跳到另一个过程,本地变量的内容被放到堆栈中。堆栈是一个大小随着要求执行的脚本动态增长和缩小的内存工作区域。
...全文
128 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zysoft17 2005-07-13
  • 打赏
  • 举报
回复
试试这样:

'. 链接数据,放在公共部分
set conn = Server.CreateObject("ADODB.Connection")
strconn = "DRIVER={Microsoft Access DRIVER (*.mdb)};"
strconn = strconn & "DBQ=" & Server.MapPath(accessdbname)
conn.open strconn



'.--------------------------------------------------------------
'.读出文件分类
public function treeMenu(fid)
dim s
s = ""
set rs = server.createobject("adodb.recordset")
sqlstr = "select * from news_fl where fid = " & fid
rs.open sqlstr,conn,1,1
while not rs.eof
s = 取值
'.递归
s = treeMenu(rs("id"))
rs.movenext
wend

rs.close
set rs = nothing
treeMenu = s
end function
junsunchen 2005-05-16
  • 打赏
  • 举报
回复
我这个程序是计算会员奖金的,所有会员都成一棵二叉树的,用递归来做
zysoft17 2005-05-16
  • 打赏
  • 举报
回复
兄弟,感觉你的程序不大好,
1.set rs=server.CreateObject("adodb.recordset")
这句应该放在过程前面,而不要放在过程中,可以减少内存的使用,
2.尽量少用递归,会很慢,可以换换思维方式.
不防说说自己要实现的目的,请大家分析一下,再想想办法.
iuhxq 2005-05-16
  • 打赏
  • 举报
回复
这是语言缺陷,没法解决,只能换语言

用C、C++等都可以
leo963258 2005-05-16
  • 打赏
  • 举报
回复
ChildCount=conn.execute("select count(*) from USER_INFO where CONFIRM='Y' and CREATE_SITE='"&rs("USER_ID")&"'")(0) //加set

28,409

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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