🧮 WPS 递归 | 乘法口诀表:逐一循环一键生成!!!
一、效果展示
只需要在单个单元格输入公式,回车直接生成 1~9 完整乘法口诀表,无需下拉、无需辅助列,纯函数依托递归回溯逻辑自动溢出,兼顾实用性与函数学习价值。
表格
输入公式 | 自动生成结果 |
=LET(...) | 1×1=1 2×1=2 2×2=4 3×1=3 3×2=6 3×3=9 …… 9×1=9………… …… …… …… …… …… …… …… 9×9=81 |
二、核心公式(直接复制可用)
excel
=LET(
f, LAMBDA(a, a & "×" & SEQUENCE(, a) & "=" & a * SEQUENCE(, a)),
TT, LAMBDA(a, IF(a = 1, f(a), IFNA(VSTACK(TT(a - 1), f(a)), ""))),
TT(9))
三、公式逐行拆解
1. 外层 LET 函数:变量与自定义函数封装
excel
=LET(
f,LAMBDA(...),
TT,LAMBDA(...),
TT(9))
LET 函数:WPS 动态数组函数核心之一,用于封装变量、自定义函数,减少公式冗余,提升运算效率,避免重复计算,此处用于定义两个核心自定义函数并启动递归。
核心作用:将f(行生成函数)和TT(递归回溯函数)封装,最终通过TT(9)启动整个递归运算流程,实现从 1 到 9 的乘法表生成。
2. f 函数:单行乘法口诀生成器
excel
LAMBDA(a, a & "×" & SEQUENCE(, a) & "=" & a * SEQUENCE(, a))
LAMBDA 函数:无名称自定义函数,用于构建可复用的运算逻辑,此处作为 “单行生成单元”,接收参数a(当前行数),输出该行完整乘法口诀。
关键参数解析:
a:递归过程中传递的 “当前行数”,是递归回溯的核心变量,从 9 逐步回溯至 1,再正向堆叠结果。
SEQUENCE(, a):动态数组函数,生成横向 1 维数组{1,2,...,a},作为当前行的乘数序列,是实现 “一行多组口诀” 的核心。
文本拼接逻辑:通过&运算符,将 “行数a”“× 符号”“乘数序列”“= 符号”“乘积结果” 拼接为标准乘法口诀格式,本质是数组文本拼接运算。
示例:当a=3时,SEQUENCE(,3)生成{1,2,3},最终输出{"3×1=3","3×2=6","3×3=9"},即第三行完整口诀。
3. TT 函数:递归回溯核心
excel
LAMBDA(a, IF(a = 1, f(a), IFNA(VSTACK(TT(a - 1), f(a)), "")))
这是整个公式的核心,依托递归回溯思想实现从 1 到 9 的完整口诀堆叠,拆解如下:
递归回溯定义:通过 LAMBDA 函数自我调用(递归),从目标值9逐步回溯至终止条件a=1,再从终止条件正向堆叠所有结果,本质是 “分治思想 + 回溯拼接”。
递归终止条件:IF(a = 1, f(a), ...),当回溯到a=1时,停止递归,调用f(1)生成第一行口诀(递归出口),避免无限递归报错。
递归回溯过程:IF(a≠1, IFNA(VSTACK(TT(a - 1), f(a)), ""))
TT(a - 1):递归调用自身,将参数a减 1,实现 “回溯”(从 9→8→7→...→1),逐步拆解问题,获取 1~a-1 行的口诀结果。
VSTACK函数:垂直堆叠数组函数,将上一轮递归获取的 “1~a-1 行口诀” 与当前行f(a)生成的口诀垂直堆叠,实现 “正向拼接”。
IFNA(..., ""):容错处理,捕获递归过程中可能出现的#N/A错误(如数组堆叠异常),确保公式稳定运行,提升鲁棒性。
四、完整运行过程明细(递归回溯 + 正向堆叠)
以TT(9)为例,完整拆解递归回溯的每一步,结合专业术语说明,清晰呈现公式运行逻辑:
第一步:递归回溯阶段(从 9 拆解至 1,分治拆解问题)
第 1 层递归:调用 TT (9)
此时a=9 ≠ 1,不满足终止条件,执行VSTACK(TT(8), f(9))
核心动作:触发递归回溯,先调用TT(8)拆解 “生成 1~8 行口诀” 的子问题,再生成第 9 行口诀,等待子问题结果后进行堆叠。
第 2 层递归:调用 TT (8)
a=8 ≠ 1,执行VSTACK(TT(7), f(8))
核心动作:继续回溯,拆解为 “生成 1~7 行口诀”+“生成第 8 行口诀”,延续分治思想。
第 3 层:调用 TT (7) → 执行VSTACK(TT(6), f(7))
第 4 层:调用 TT (6) → 执行VSTACK(TT(5), f(6))
第 5 层:调用 TT (5) → 执行VSTACK(TT(4), f(5))
第 6 层:调用 TT (4) → 执行VSTACK(TT(3), f(4))
第 7 层:调用 TT (3) → 执行VSTACK(TT(2), f(3))
第 8 层:调用 TT (2) → 执行VSTACK(TT(1), f(2))
第 9 层:调用 TT (1)(递归出口)
a=1,满足终止条件,停止回溯,调用f(1)生成第一行口诀:{"1×1=1"}
核心意义:递归回溯的 “终止节点”,生成最基础的子问题结果,为正向堆叠提供起始数据。
第二步:正向堆叠阶段(从 1 叠加至 9,回溯结果拼接)
递归回溯完成后,从终止节点TT(1)开始,逐层向上返回结果,通过VSTACK完成垂直堆叠,形成完整乘法表:
TT(1) 返回结果:{"1×1=1"}(第一行)
TT(2) 堆叠:VSTACK(TT(1), f(2)) → 第一行 + 第二行({"2×1=2","2×2=4"})
TT(3) 堆叠:VSTACK(TT(2), f(3)) → 前两行 + 第三行
…… 以此类推,逐层向上堆叠……
TT(9) 最终堆叠:VSTACK(TT(8), f(9)) → 1~8 行 + 第 9 行,形成完整 1~9 乘法表,通过动态数组自动溢出显示。
关键总结
整个运行过程,本质是递归回溯的分治思想:将 “生成 9 行乘法表” 的大问题,拆解为 “生成 1~8 行”“生成 1~7 行”……“生成 1 行” 的小问题,逐一解决小问题后,通过VSTACK正向拼接,最终得到完整结果,无需人工干预,实现 “一键生成”。
五、使用步骤
选单元格:选择一片空白区域的首个单元格(建议 A1),预留足够空间(避免溢出错误)。
输公式:复制文中完整核心公式,粘贴到选中单元格,按回车确认。
出结果:公式自动执行递归回溯与数组堆叠,一键生成 1~9 完整乘法表,无需下拉填充、无需辅助列。
灵活调整
想生成 12 阶、15 阶乘法表,只需将公式末尾的TT(9)改为TT(12)、TT(15),递归回溯逻辑会自动适配行数,生成对应阶数的乘法表。
六、关键知识点 & 避坑指南
✅ 适用版本
必须是 WPS 365 / WPS 2021 及以上版本(需支持动态数组函数簇:LAMBDA、VSTACK、SEQUENCE、LET)。
低版本 WPS/Excel(如 Excel 2019 及以下)不支持 LAMBDA 和动态数组,公式会直接报错。
✅ 核心原理复盘
递归回溯:通过 LAMBDA 自我调用,实现 “从大到小拆解、从小到大拼接”,是实现 “一键生成” 的核心逻辑。
动态数组运算:SEQUENCE 生成横向乘数数组,VSTACK 实现垂直堆叠,LET 封装函数减少冗余,三者结合实现高效运算。
文本与数组拼接:通过&运算符,将数值、符号、运算结果拼接为标准口诀格式,兼顾实用性与可读性。
⚠️ 避坑注意事项
溢出错误(#SPILL!):单元格空间不足,需清空公式所在单元格下方、右侧的空白区域,预留足够显示空间。
递归报错(#NUM!):若修改TT(9)为过大数值(如TT(20)),会导致递归层数过多、计算量过载,出现数值错误,建议控制在 15 以内。
函数兼容性:公式中VSTACK不可替换为HSTACK(HSTACK 为横向堆叠,会导致口诀横向排列,无法形成表格)。
空值容错:IFNA函数不可省略,否则递归过程中若出现数组异常,会导致整个公式报错,影响运行稳定性。
七、拓展用法(进阶延伸)
生成加法表:将公式中所有*(乘法运算符)改为+(加法运算符),递归回溯逻辑不变,一键生成 1~9 加法表。
生成除法表:将*改为/(除法运算符),调整拼接格式(如a & "÷" & SEQUENCE(,a) & "=" & a/SEQUENCE(,a)),生成除法表。
竖排展示:在公式外层嵌套TOCOL函数(=TOCOL(LET(...))),将横向排列的每行口诀,转为垂直一列显示,适配不同展示需求。
自定义阶数:结合单元格引用,将TT(9)改为TT(K1),在 K1 单元格输入目标阶数,实现 “动态调整阶数”,无需修改公式。
八、总结
该公式的核心价值,在于用纯函数实现递归回溯逻辑,无需 VBA、无需辅助操作,仅用一个单元格就完成九九乘法表的生成,既适合日常办公、教学演示,也适合学习 LAMBDA 递归、动态数组、分治思想等高阶函数知识点。
递归回溯是 Excel/WPS 函数进阶的核心难点,掌握这个公式的运行逻辑,能快速理解递归的 “拆解 - 回溯 - 拼接” 思路,举一反三写出更多 “一键生成” 类的高效公式,提升办公效率与函数功底!


