【语法】
一、隐蔽陷阱
20 级台阶的走法数用朴素递归一跑,脚本线程占满、十几秒无响应,同一层台阶被反复重算成千上万次。
二、底层原理
到第 n 级只能从第 n-1 级跨 1 步或第 n-2 级跨 2 步,走法数 f(n)=f(n-1)+f(n-2)。递归自顶向下重复计算子问题;递推自底向上只保留最近两个值滚动前进,n 级台阶 n-2 次加法出结果。
三、正确代码
基础写法(递归定义,直观但重复计算):
local function stepRec(n)
if n <= 2 then return n end
return stepRec(n - 1) + stepRec(n - 2)
end
进阶写法(递推滚动两变量):
local function stepFast(n)
local a, b = 1, 2
for i = 3, n do
a, b = b, a + b
end
return b
end
local p = getplayerbyname("step01")
sendmsg(p, 1, "20 级台阶 " .. stepFast(20) .. " 种走法")
四、引擎验证
递推版 18 次加法输出 10946;与递归版对照 n=10 时同为 89,两个版本结果一致而耗时相差百倍。
五、FAQ
问:为什么长得像斐波那契?
答:同一递推式,走法问题就是它换了一层外衣。
问:能一次跨 3 级吗?
答:递推式多加一项 f(n-3) 即可。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、规则机制 线上事故:玩家装备耐久打空才发现,战力拦腰砍半,打不动怪又投诉掉率。耐久提醒立双档:耐久低于三成弹黄…
【语法】 一、机制原理 抛个坑:行列表格要变成列行,每格都搬一遍还新建了整张表——方形矩阵能不能原地换?转置沿对角线折返:只…
【游戏】 一、规则机制 隐蔽的坑:"最近浏览"里同一件商品重复出现五六次,足迹成了复读机。浏览足迹立两条:每次查看先在足迹里…
【语法】 一、机制原理 一行代码拆解:local bucket = math.floor(v / width)。数值分布统计…
【语法】 一、机制原理 一行代码拆解:setmetatable(cfg, {__index = DEFAULTS})。配置对…
【游戏】 一、规则机制 线上事故:结算时玩家追问"我到底打了多少",战斗中没有任何实时输出面板,事后对不上账。输出统计两步走…