You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用全局变量的递归函数中计算Tag=1控件的高度总和?

递归计算Tag=1控件高度总和(无全局变量方案)

嘿,这个问题其实很好解决——核心就是让你的递归函数自己返回累加的总和,不用靠全局变量来存中间值。这样既干净又符合递归的设计逻辑。

思路拆解

  1. 让ListChildren函数直接返回当前节点及其所有子节点中,Tag属性为1的控件高度总和。
  2. 每次调用函数时,先判断当前节点是否符合条件(Tag=1),如果是就把它的高度加入结果。
  3. 遍历所有子节点,递归调用ListChildren,把每个子节点返回的总和加到当前结果里。
  4. 最后返回这个累计的结果,上层调用直接接收就行。

修改后的完整代码

procedure getSumHeightTagOne;
var hh: double;
begin
  hh := ListChildren(myObj, 0); // 直接拿到递归计算的总高度
  // 这里可以根据需求处理hh,比如输出、存储等
end;

function ListChildren(Obj: TFMXObject; Level: Integer): double;
var i: Integer;
begin
  Result := 0; // 初始化累加结果为0
  
  // 先检查当前节点是否符合条件,符合就加上它的高度
  if Obj.Tag = 1 then
    Result := Result + Obj.Height;
  
  // 遍历所有子节点,递归累加子节点的贡献
  for i := 0 to Obj.ChildrenCount - 1 do
  begin
    Result := Result + ListChildren(Obj.Children[i], Level + 1);
  end;
end;

关键点说明

  • 所有的累加逻辑都封装在ListChildren函数内部,完全不需要全局变量,递归栈会帮我们传递中间结果。
  • 代码里假设控件的高度属性是Height,如果你的实际属性名称不同,替换成对应的字段即可。
  • Level参数可以保留用来做层级日志或者其他逻辑,不影响求和功能。

内容的提问来源于stack exchange,提问作者Luiz Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:54