gpt4 book ai didi

excel - 非 VBA 递归阶乘函数?

转载 作者:行者123 更新时间:2023-12-02 10:43:11 26 4
gpt4 key购买 nike

是否可以通过启用循环引用(在Excel选项公式部分中选择启用迭代计算)来创建递归Excel中的阶乘函数?我当然了解 FACT() 并且并不是在寻找计算阶乘的实用方法。相反,我的目标是找到一种方法来利用循环引用作为在 Excel 中创建和使用递归函数的通用工具,而阶乘提供了一个有趣的测试用例。

使用 Jan Karel Pietrerse 的 website 的想法我能够接近,但生成的函数取决于两个单元而不是一个,所以它不能解决问题。在

enter image description here

我使用顶行中的字符串创建了命名范围。在现在名为 factorial 的单元格中,我输入:

=IF(initializing,1,IF(factor=0,factorial,factorial*factor))

在单元格因子中我输入:

=IF(initializing,n,IF(factor=0,factor,factor-1))

上图显示了当n = 10initializing = True时的情况。 factorial 中的公式对应于函数式编程中创建递归函数的标准技巧 tail-call recursive通过引入带有累积参数的辅助函数。问题在于需要调用辅助函数,而阶乘中的公式在某种意义上既是函数本身又是其辅助函数,而initializing 的内容决定了它当前扮演的角色。

我的工作原理是,如果我将 initializing 的值从 True 切换过来(例如,只需删除它),那么 factorial 的值将成为正确的阶乘:

enter image description here

可以从图片中删除initializing吗?是否可以修改设置,以便例如n 更改为 5,然后 factorial 立即更改为 120,而不需要先设置然后更改其他单元格?我尝试了几种不同的方法,但最终还是得到了 2 步函数而不是 1 步函数。也许涉及数组公式的一些魔法?

最佳答案

这是一个只有一个辅助单元格的公式,只要 n 就会自动更新更改了,当然辅助列比原来的更复杂:
enter image description here

  • 帮助者:=IF(C2<>TEXT(A2,"0"),IF(ISNUMBER(C2),IF(C2=A2,TEXT(A2,"0"),C2+1),1),C2)
  • 阶乘:=IF(ISNUMBER(C2),IF(C2=1,1,C2*D2),D2)

关键是在达到结果时更改辅助单元格(也可以否定,用文本完成(例如 A1&" Finished" ,重要的是要清楚地表明它已达到计算结束并保持其与输入单元格)。

只是为了好玩,F2 中没有迭代的数组公式:=PRODUCT(ROW(INDIRECT("a1:a"&A2,TRUE)))

更新

逐步公式:
助手:

  • 稳定状态被格式化为文本,只要文本值与 n 相同没有任何反应,公式不会更改 helper 中的值
  • 一次n已更改:第一个标准 C2<>TEXT(A2,"0")将是错误的,但是 helper仍然是文本,所以第二个标准也是错误的,helper重置为 1
  • 之后helper递增直到达到 n ,当达到目标时helper转换为文本以标记计算完成

阶乘:

  • 同时helper是文本什么也没发生
  • 一次helper是数字:如果是 1 则 factorial重置为 1,否则乘法 helper * factorial计算得出

关于excel - 非 VBA 递归阶乘函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com