递归树出错

Only_D 2006-02-11 03:24:46
下面代码有点问题,是这里的一个老兄贴出来的,原本是递归树直板式,后来我改成下拉式菜单,
往数据库里录入栏目时,现在如下栏目:
ID UperID sortID (自动ID/父ID/级别ID)
--------------------------------
1 0 1
2 1 2
3 2 3
4 3 4
--------------------------------
上面数组调出栏目递归没有问题,但当在已经添加到第四级栏目时再添加第二级栏目:

ID UperID sortID (自动ID/父ID/级别ID)
--------------------------------
1 0 1
2 1 2
3 2 3
4 3 4
5 2 2 <---这里添加为第二级栏目
--------------------------------

调出运行只递归到第三级树,第四级栏目退回到了第三级的下面并排了,为什么?

<%
dim fatherID
function ShowSort(uID,sID)
dim rs,sql,title,i,j,upID,sortID,temp,fatherTree
upID=uID
sortID=sID
sql="select * from ArticleClass where SortID="&sortID&" and UperID="&upID
title=""
set rs = Server.CreateObject("adodb.recordset")
rs.open sql,conn,1,1
if not(rs.eof and rs.bof) then
for i=0 to rs.recordcount-1
if sortID>1 then
fatherID=upID
fatherTree=ShowFatherLine(upID,sortID-1)
if i = rs.recordcount-1 then
title=""&temp&fatherTree&" ├ "
else
title=""&temp&fatherTree&" ├ "
end if
else
title=""'最高级目录树
end if
Response.Write "<option value='"&rs("id")&","&rs("uperid")&","&rs("sortid")&","&rs("title")&"'>"&title&""&rs("title")&"</option>"

call ShowSort(rs("ID"),sortID+1)'递归
rs.movenext
next
'else
end if
rs.close
set rs=nothing
end function

function isNext(sID,uID)
dim rs,sql
sql="select count(*) from ArticleClass where id>"&sID&" and SortID="&uID
'Response.Write sql
set rs=conn.execute(sql)
isNext = rs(0)
set rs=nothing
end function

function ShowFatherLine(fID,fSortID)
dim rs,sql
if fSortID=1 then'最后
sql="select count(*) from ArticleClass where id>"&fID&" and SortID="&fSortID
set rs=conn.execute(sql)
ShowFatherLine=parentTree(rs(0))
set rs=nothing
else
sql="select count(*) from ArticleClass where id>"&fID&" and SortID="&fSortID
set rs=conn.execute(sql)
ShowFatherLine=ShowFatherLine(fatherID,fSortID-1)&parentTree(rs(0))'递归

sql="select UperID from ArticleClass where id="&fatherID'fatherID全局变量
set rs=conn.execute(sql)
fatherID=rs(0)
set rs=nothing
end if

end function

function parentTree(TN)
if TN=0 then
parentTree=" │"
else
parentTree=""
end if
end function
%>
<SELECT name="ChannelID" id="ChannelID"><% call ShowSort(0,1)%></select>
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Only_D 2006-02-13
  • 打赏
  • 举报
回复
看见就烦
递归下降分析法 一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 二、实验说明 1、递归下降分析法的功能 词法分析器的功能是利用函数之间的递归调用模拟语法自上而下的构造过程。 2、递归下降分析法的前提 改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法, 3、递归下降分析法实验设计思想及算法 为G的每个非终结符号U构造一个递归过程,不妨命名为U。 U的产生式的右边指出这个过程的代码结构: (1)若是终结符号,则和向前看符号对照, 若匹配则向前进一个符号;否则出错。 (2)若是非终结符号,则调用与此非终结符对应的过程。当A的右部有多个产生式时,可用选择结构实现。 三、实验要求 (一)准备: 1.阅读课本有关章节, 2.考虑好设计方案; 3.设计出模块结构、测试数据,初步编制好程序。 (二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。 (三)程序要求: 程序输入/输出示例: 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E->eBaA (2)A->a|bAcB (3)B->dEd|aC (4)C->e|dc 输出的格式如下: (1)递归下降分析程序,编制人:姓名,学号,班级 (2)输入一以#结束的符号串:在此位置输入符号串例如:eadeaa# (3)输出结果:eadeaa#为合法符号串 注意: 1.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 2.对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。 (四)程序思路 0.定义部分:定义常量、变量、数据结构。 1.初始化:从文件将输入符号串输入到字符缓冲区中。 2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

28,406

社区成员

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

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