我正在尝试理解以下代码片段以进行计数
msgbox 如何存储 n 的所有值?
是不是因为在调用 countup(n-1) 时,它实例化了函数,然后将 n 值与 msgbox 实例相关联?
Option Explicit
Sub countup(n As Integer)
If (n > 1) Then
countup (n - 1)
End If
MsgBox (n)
End Sub
Sub myprogram()
Call countup(10)
End Sub
最佳答案
正如@EdPlunkett 提到的,实例化与它无关。这涉及创建新对象。这是关于从自身内部调用相同的函数,或递归。
程序执行如下所示:
countup(10) called
-> countup(9) called
-> countup(8) called
-> countup(7) called
-> countup(6) called
-> countup(5) called
-> countup(4) called
->countup(3) called
->countup(2) called
-> MsgBox (1)
-> MsgBox (2)
-> MsgBox (3)
-> MsgBox (4)
-> MsgBox (5)
-> MsgBox (6)
-> MsgBox (7)
-> MsgBox (8)
-> MsgBox (9)
-> MsgBox (10)
每次缩进 2 个空格以显示递归调用或退出。
如您所见,调用堆栈在执行第一个
If (n > 1)
之前一直增加,直到达到完整的 9 级(由于 MsgBox
)。 .然后代码返回到前一个调用者,该调用者调用它的MsgBox
。并继续整个备份调用堆栈,返回到每个先前的调用者。最后,我们返回
countup(10)
,执行最终的 MsgBox(10),此时我们返回 myprogram()
.
关于vba - 对函数的递归调用是否会实例化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733546/