vba - 对函数的递归调用是否会实例化它?

标签 vba excel recursion callstack

我正在尝试理解以下代码片段以进行计数
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/

相关文章:

excel - 使用 IFERROR 返回空白

vba - 在特定工作表中搜索文本字符串

excel - 如何为一张索引表中的每个工作表创建一个超链接?

jquery - 通过发送ajax请求下载Excel文件

c# - 无法访问 excel 文件

recursion - 递归遍历当前目录,然后遍历父目录以查找子目录

excel - 将范围值传递给数组时,为什么数组索引从 1 开始

excel - 在 Excel 中使用 VBA 添加希伯来语自动更正条目

java - 在编写递归算法时使用全局变量与传递变量

c - 递归幂函数 : approach