一个程序递归的问题,请高手执教!

xiwanghope 2003-02-27 02:05:58
我在做一个树装列表的程序,写了一个称许用于在关闭根节点的时候把下面打开的字节点等等全都关掉。

我是用递归调用来做。
递归是函数1调用函数2,然后函数2在自己调用自己,可是这样当函数2查找字节点找不到的时候,直接就回到了函数1那里,没有回到函数2继续执行。

请问改如何解决啊?我做的函数2没有返回值,是个过程。

请多多帮忙~
...全文
29 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
我不会加分,抱歉
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
高兴,各位我爱死你们了~~我痛苦了一个上网了~:)

结帐~
emu_ston 2003-02-27
  • 打赏
  • 举报
回复
同意楼上,没有var的时候j是全局变量。
xuzuning 2003-02-27
  • 打赏
  • 举报
回复
函数2是closeit吧?
直观的感觉是这里不对
for(j=1;j<divTree.length;j++){
应该是
for(var j=1;j<divTree.length;j++){
否则本层次的j的值会受下一层次的j的影响

若还不行,请给出html部分以便测试
qiudehuo 2003-02-27
  • 打赏
  • 举报
回复
var j
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
不管用哦,还是不行,我快晕了
qiudehuo 2003-02-27
  • 打赏
  • 举报
回复
由于无法测试,这里提供想法。
function closeit(id) {
var tmpId = id; //将此变量先赋值到一个局部变量中。
var Tree
var divTree = document.all.tags("div");
var ob = eval(tmpId);

for(j=1;j<divTree.length;j++){
Tree = divTree(j);
if(Tree.parent == tmpId){

closeit(Tree.id);
Tree.style.display = "none";
ob.all.tags('img')[0].src='../images/icon-folder1-close.gif';
ob.all.tags('img')[1].src='../images/icon-folder-close.gif';
if(Tree.className != "linkmenu"){
Tree.all.tags('img')[0].src='../images/icon-folder1-close.gif';
Tree.all.tags('img')[1].src='../images/icon-folder-close.gif';
}

}

}
}
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
function openit(typeid) {

var divTree = document.all.tags("div");
var obj = eval(typeid);
var j = 1
for(i=1;i<divTree.length;i++){
var objTree = divTree(i);

if(objTree.parent == obj.id){

if (objTree.style.display == "none" ) {
objTree.style.display = "block";
obj.all.tags('img')[0].src='../images/icon-folder1-open.gif';
obj.all.tags('img')[1].src='../images/icon-folder-open.gif';
}else {
closeit(objTree.id)
objTree.style.display = "none";
obj.all.tags('img')[0].src='../images/icon-folder1-close.gif';
obj.all.tags('img')[1].src='../images/icon-folder-close.gif';
if(objTree.className != "linkmenu"){
objTree.all.tags('img')[0].src='../images/icon-folder1-close.gif';
objTree.all.tags('img')[1].src='../images/icon-folder-close.gif';
}
}

}
}


}

function closeit(id) {
var Tree
var divTree = document.all.tags("div");
var ob = eval(id);

for(j=1;j<divTree.length;j++){
Tree = divTree(j);
if(Tree.parent == id){

closeit(Tree.id);
Tree.style.display = "none";
ob.all.tags('img')[0].src='../images/icon-folder1-close.gif';
ob.all.tags('img')[1].src='../images/icon-folder-close.gif';
if(Tree.className != "linkmenu"){
Tree.all.tags('img')[0].src='../images/icon-folder1-close.gif';
Tree.all.tags('img')[1].src='../images/icon-folder-close.gif';
}

}

}
}


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
抱歉,忘了给程序了,程序就是这么写的,问题在那里?请再指教~
emu_ston 2003-02-27
  • 打赏
  • 举报
回复
参考一下:

http://expert.csdn.net/Expert/TopicView1.asp?id=1447234
xuzuning 2003-02-27
  • 打赏
  • 举报
回复
由于你没有给出函数的写法,只有猜了。你大概是这样作的

函数2:
if 子节点?
函数2
else
其他
endif
或者
函数2:
if 子节点?
函数2
endif
其他

这样只会沿一条分支走到底,然后返回
应该还有个循环来判断是否有兄弟节点,没有再返回

Go_Rush 2003-02-27
  • 打赏
  • 举报
回复
函数,代码贴出来呀
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
我还是高不定,请高手在指点指点啊,我想了一个上午了,是在不知道为什么会出现这种情况
qiudehuo 2003-02-27
  • 打赏
  • 举报
回复
要注意局部变量,最好在传递中重新赋值到新的局部变量中,我以前也出现这个问题。
xiwanghope 2003-02-27
  • 打赏
  • 举报
回复
程序没有出错哦,如果查找不到字节点,函数2就会执行到最后,然后他应该返回上一层也就是调用自己的那个函数2中,继续自行,可他没有直接跑到函数1继续执行去了。

请问是怎么会是啊?
wsj 2003-02-27
  • 打赏
  • 举报
回复
>当函数2查找字节点找不到的时候,直接就回到了函数1那里?

出错了吗?

那就让他不要出错

function fun2()
{
try
{

//你的程序内容

}catch(e){}
}

87,916

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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