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

Excel中能否编写递归公式计算反向遍历数组的乘积和

递归公式定义

你描述的计算本质是等长序列的反向点积和,我们记长度为n的X序列(X₁~Xₙ)和Y序列(Y₁~Yₙ)的计算结果为S(n),对应的递归公式如下:

  • 基础边界:当n=1时,S(1) = X₁ * Y₁
  • 递推逻辑:当n>1时,S(n) = X₁*Yₙ + Xₙ*Y₁ + S(n-2),其中S(n-2)是去掉首尾元素后的子序列X₂~Xₙ₋₁、Y₂~Yₙ₋₁的反向点积和

Excel实现方法

该计算完全可以在Excel中实现,常见两种实现方案:

1. 普通公式实现(无需递归)

不需要用到递归逻辑,直接调用内置函数即可实现,是最常用的方案:

  • 如果你使用Excel 365/2021版本,假设X数据存放在A列、Y数据存放在B列,数据从第1行开始录入,C1单元格输入以下公式后下拉即可批量计算所有行的Z值:
=SUMPRODUCT(A$1:A1, SORTBY(B$1:B1, ROW(B$1:B1), -1))
  • 如果你使用旧版Excel,使用以下数组公式,输入完成后按Ctrl+Shift+Enter三键确认,再下拉填充即可:
=SUMPRODUCT(A$1:A1, N(INDEX(B:B, ROW(A1) - ROW(A$1:A1) + 1)))

2. 递归实现(仅Excel 365/2021支持)

借助Excel的LAMBDA自定义函数可以实现纯递归计算,操作步骤如下:

  1. 点击「公式」选项卡→选择「定义名称」
  2. 名称栏填写REV_DOT,范围选择「工作簿」,公式栏填入:
=LAMBDA(x_range,y_range,IF(ROWS(x_range)=1,INDEX(x_range,1)*INDEX(y_range,1),INDEX(x_range,1)*INDEX(y_range,ROWS(y_range))+INDEX(x_range,ROWS(x_range))*INDEX(y_range,1)+IF(ROWS(x_range)=2,0,REV_DOT(INDEX(x_range,2):INDEX(x_range,ROWS(x_range)-1),INDEX(y_range,2):INDEX(y_range,ROWS(y_range)-1)))))
  1. 确认保存后即可直接调用,比如要计算A1:A3和B1:B3的反向点积和,直接输入=REV_DOT(A1:A3,B1:B3)即可得到结果。

内容的提问来源于stack exchange,提问作者Sam Schoenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:54:03