求救!递归出错!50分!急!(50分)

  • 主题发起人 主题发起人 zhezhe
  • 开始时间 开始时间
Z

zhezhe

Unregistered / Unconfirmed
GUEST, unregistred user!
一个函数,传入参数为ID ,链表的头指针tempNode(指针类型自定义好了,链表已经存在,只需遍历),
临时字符串tempStr(传入为空),返回类型为string
主要完成目录的回溯,目录的实际路径信息生成功能!
function findRout(tempId:integer;tempNode:Pnode;tempStr):string;
begin
while tempNode<>nil do
while tempId<> -1 do begin
begin
if tempNode.dirtId = tempId then
begin
tempStr:= tempNode.dirName+'/'+tempStr;
// showMessage(tempStr);监视使用
tempId:= tempNode.dirParentId;
tempNode:=firstNode;//firstNode为已经存在的头指针!
findRout(tempId,tempNode,tempStr);

end


end;
tempNode:= tempNode.dirNextNode;
end;

end;
该段程序可以看到我要找到的路径,但是循环无法终止!请高手赐教!
如果有更好的办法告之,我可以多送分!
 
代码是临时提问写的,可能有明显小错误,但是表达了基本的思路!
function findRout(tempId:integer;tempNode:Pnode;tempStr):string;
begin
if tempId<> -1 then begin
while tempNode<>nil do begin
begin
if tempNode.dirtId = tempId then
begin
tempStr:= tempNode.dirName+'/'+tempStr;
// showMessage(tempStr);监视使用
tempId:= tempNode.dirParentId;
tempNode:=firstNode;//firstNode为已经存在的头指针!
findRout(tempId,tempNode,tempStr);

end


end;
tempNode:= tempNode.dirNextNode;
end;
end else result:= tempstr;
end;
 
出分太少,这么小气,怎么得到高手指点啊!!!
 
大哥,你能不能把调试过的代码拷过来?读来读去第一次少个begin,第二次又多了一个。
对于Delphi的递归我还没有用过。不过这段代码如果在VB里就没有问题,在VC里肯定死掉了。
因为VC不会自动处理中间变量,你的中间变量会被替换掉,从而使循环无法继续。
再加一个全局变量链表,用来保存已经走过的地方。
 
实在抱歉,我的代码和我上网的地方不在一处!不过问题我已经自己解决了,调试通过啦!
跟上面的差不多!但是只是实现了功能(我用一个全局变量接受我想得到的字符串!很笨吧:))!我改天把它贴出来
欢迎大家的意见!
另外,我的分的确不多!我的水平不高,不能挣到很多的分,所以.......
不好意思了!以后水平提高,我肯定给分大方!不过我的问题其实不是很难!我只是想
得到好的方法而已!所以给分不多!但我觉得很问题难度是比较成比例的!
我打算出的分怎么办?给谁!谁能告诉我?

 
交个朋友!我也在学内功。在积木时代想找个同行者非常难!
QQ: 50078575 验证:算法+数据结构
正所谓道可道,非常道。编程之道就如武学之道:VB,VC,delphi等开发工具的技巧好比
各门各派的武功招式,算法和数据结构好比内功心法和武学原理。内力深厚,任何招式到
了手上都能够化腐朽为神奇;掌握了武学原理,更能做到无招胜有招。
(from “算法+数据结构”)
 
建议多看看算法设计相关数目,多写写基本算法

很多算法有着固定的格式
 
后退
顶部