我有以下功能:
f(n) = f(n - 1) + (n - 1)
f(0) = 0
n >= 0
我已经在 A 列上声明了,并且需要B 列上n
的结果。f(n)
我正在尝试找到该函数等效的 Excel 公式。
示例结果:
A | B
--+--
0 | 0
或者:
A | B
--+--
1 | 0
或者:
A | B
--+--
4 | 6
但从来没有:
A | B
--+--
0 | 0
1 | 0
2 | 1
...
最大的问题是,我无法模拟 的值f(n - 1)
。因此,像上面的例子一样引用前一行是无效的。我几乎可以肯定答案很简单,我只是找不到它。
答案1
这有帮助吗?
f(n) = sum of all positive integers less than n
它应该,特别是在一些算术。
好的,鉴于人们现在用用户定义的函数发布答案,这就是答案
f(n) = (n-1)n/2
更新:对于那些看不出该公式没有使用任何其他行的信息的人(请参阅下面 Stan R. 的评论),我稍微打乱了顺序:
0 =(A1-1)*A1/2 0 9 =(A2-1)*A2/2 36 2 =(A3-1)*A3/2 1 4 =(A4-1)*A4/2 6 6 =(A5-1)*A5/2 15 5 =(A6-1)*A6/2 10 10 =(A7-1)*A7/2 45 8 =(A8-1)*A8/2 28 3 =(A9-1)*A9/2 3 7 =(A10-1)*A10/2 21 1 =(A11-1)*A11/2 0 ...
答案2
您需要以递归方式解决它吗?这当然不是解决问题的最佳方法:
将 1 至 10 的数字相加
1 + 2 + 3 + 4 + 5
+ 10 + 9 + 8 + 7 + 6
-- -- -- -- --
11 +11 +11 +11 +11 = 55
或者,正如总结的那样,(n+1)(n/2)
当 n=10 时,这显然是11 x 5
答案3
可以重新表述该函数以消除递归。
让我们举几个例子……
f(4)=1+2+3=6
f(5)=1+2+3+4=10
f(6)=1+2+3+4+5=15
这里有一个模式:
f(4)=1+2+3=6=4*1.5
f(5)=1+2+3+4=10=5*2
f(6)=1+2+3+4+5=15=6*2.5
这意味着我们可以将该函数推广到f(n)=1+2+...+n=n*(n-1)/2
n>1 以及f(n)=0
其他情况。
然后可以将生成的 Excel 公式写成=IF(A5>1;A5*(A5-1)/2);0)
,假设 A5 包含 n。
显然,如果您的公式比您给出的公式更复杂,它可能会变得更加困难,并且只需编写一个用户定义函数(如Scott建议的那个),然后使用它可能会更快更容易。
答案4
不确定如何使用纯公式来实现。一种选择是使用 UDF
Public Function f(n As Integer) As Integer
If (n = 0) Then
f = 0
Exit Function
End If
If (n > 0) Then
f = f(n - 1) + (n - 1)
End If
End Function
然后公式就是=f(A1)