CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
入门夯实996引擎递归终止条件

【入门夯实】递归函数的终止条件:stack overflow的防线

2026-09-24 19:44 作者:996 技术组 996引擎Lua教程传奇脚本入门夯实996引擎Lua递归终止条件

学员常见误区

递归函数缺终止分支或终止条件写错,调用直接把调用栈打爆报 stack overflow。常见错法有两类:一是条件比较写反,层级判断 >= 上限写成 > 上限,多递归一层恰好越界;二是在 local f = function() ... f() ... end 里递归调用 f——此时函数体执行时 f 还在赋值过程中,函数体内看到的是全局 f,值为 nil,调用报 attempt to call a nil value。错误场景:

lua
local clear = function(n)
    clear(n + 1)
end
clear(1)

没有终止条件,递归到栈上限直接崩溃。

正确姿势

local function f() 的语法糖会让函数名在函数体内可见,递归才能成立;终止条件放函数体首行,并设硬上限兜底。清理祖玛教主召唤链:祖玛卫士被击杀后召唤雕像,雕像再召唤弓箭手,最多 3 层,递归清理每层召唤物。示例代码如下:

lua
local function clearSummons(actor, floor, maxFloor)
    if floor > maxFloor then
        return 0
    end
    actor = getplayerbyname(actor)
    local cleared = 1
    sendmsg(actor, 1, "清理第 " .. floor .. " 层召唤物。")
    cleared = cleared + clearSummons(actor, floor + 1, maxFloor)
    return cleared
end

调用时 clearSummons(actor, 1, 3),返回 3 表示三层全部清理;maxFloor 硬上限保证即使业务层传错也不会无限递归。示例代码如下:

lua
local function fib(n)
    if n <= 1 then
        return n
    end
    return fib(n - 1) + fib(n - 2)
end

fib 的终止分支覆盖 n 为 0 与 1 两个入口,漏掉任一入口都会在特定入参下越界。

引擎验证

三步验证:正常调用 clearSummons 返回 3 且消息按 1、2、3 层顺序输出;把 maxFloor 传 0 验证直接返回 0 不递归;用 local f = function 写法复现 attempt to call a nil value,加深语法糖理解。

举一反三

Lua 不做尾调用优化的场景有限,但依赖递归输出结果(如 fib)每层都要等待子调用返回,递归层数大时改写循环更稳。示例代码如下:

lua
local function sumTo(n)
    local s = 0
    for i = 1, n do
        s = s + i
    end
    return s
end
作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构996引擎

【策划架构】抚恤金:阵亡抚恤的发放标准设计

设计初衷 攻城战阵亡只有损失:装备掉落、耐久磨损——牺牲没有补偿,行会的伤亡成本全由个人承担,指挥不敢打硬仗。抚恤金设计:攻…

2026-09-25 19:35 996 技术组
策划架构996引擎

【策划架构】协防系统:盟友驻防的调度与分账设计

设计初衷 攻城战一触即发,盟友帮会口头答应协防却总是人没到:跨帮支援没有调度与结算机制,人情协防全凭自觉。协防系统设计:盟约…

2026-09-25 19:35 996 技术组
高级技巧996引擎

【高级技巧】享元模式:重复数据的共享封装

底层原理 一张地图上 500 棵同款树,每棵存完整的模型数据——重复数据存 500 份。享元模式把不变的部分(模型、贴图)抽…

2026-09-25 19:35 996 技术组
高级技巧996引擎

【高级技巧】桥接模式:两个维度的独立扩展封装

底层原理 技能系统按"元素×形态"组合:火球冰球乘单体群攻——每加一种元素或一种形态,组合数量乘性增长(4 元素 3 形态 …

2026-09-25 19:35 996 技术组
策划架构996引擎

【策划架构】期货系统:稀缺物资的期货交易设计

设计初衷 稀缺产出(强化石、晋级材料)的供需错位:产出季价格崩盘、断供季价格飞天——剧烈波动伤害生产者与消费者两端。期货交易…

2026-09-25 19:35 996 技术组
进阶实战996引擎

【进阶实战】傀儡机关:巡逻守卫的三态行为封装

业务场景 驻地巡逻 AI 只会沿固定路线走:玩家摸清路线后绕行如入无人之境。傀儡机关封装:机关傀儡按"巡逻、警戒、袭扰"三态…

2026-09-25 19:35 996 技术组