【问题标题】:Factorial macros while loop阶乘宏while循环
【发布时间】:2016-09-05 10:23:12
【问题描述】:

我正在尝试编写一个开放式办公室宏代码来使用 while 循环计算阶乘,但我发现它很困难。到目前为止,这是我的代码。任何帮助都将不胜感激。

Sub DisplayFact()
    Dim n As Long
    Dim nFact As Long

    'Initialsing n to zero 
    if n = 0
        return nFact = 0 ;

    While n <= 4

        MsgBox "n = " & n & " ,  nFact =  " & nFact 

        n = n + 1
        nFact= n*nFact(n-1)
    Wend

End Sub

【问题讨论】:

  • 你有以前版本的代码吗? Sub 不是 Functionreturn 在 VBA 中无效
  • 这是软件 OpenOffice中的“开放式办公室”吗?
  • 不确定 OppenOffice 中是否可用,但也许您可以使用Fact Excel 功能
  • @Slai - 是的,我唯一一次滚动自己的阶乘(使用Decimal)是如果我需要避免Double 的精度损失。
  • 并且代码中隐含的零阶乘定义(=0)是错误的。它应该是 1。

标签: excel macros vba


【解决方案1】:
Sub DisplayFact()

    Dim n As Long

    n = 0 'Initialsing n to zero

    While n <= 4
        MsgBox "n = " & n & ", Fact = " & WorksheetFunction.Fact(n)
        n = n + 1
    Wend

End Sub

或者也许:

Do
.
.
Loop While n <= 4  

Do While n <= 4
.
.
.
Loop

【讨论】:

    【解决方案2】:

    你应该使用For..To 循环来处理这种事情:

    For n = 0 To 4
        MsgBox "n = " & n & " ,  nFact =  " & nFact 
        nFact= n * nFact(n - 1)
    Next
    

    此循环将从n 开始,其值为0,并在每次迭代时自动将n 的值加1。

    您还可以使用可选的Step 参数来更改增量:

    For n = 1 To 10 Step 2
        '// n will go through 1 > 3 > 5 > 7 > 9 and then exit
    Next
    
    For n = 10 To 1 Step - 3
        '// n will go through 10 > 7 > 4 > 1 and then exit
    Next
    

    【讨论】:

    • @Comintern 实际上,再看一遍,我认为任何 OP 代码都没有意义......
    • 看来 OP 从递归版本开始,nFact 是一个函数,并尝试将其更改为迭代
    • 是的,我认为整个事情也应该是一个函数,其中n 作为参数传递。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多