VBA 认为 Return 是一个变量
VBA thinks Return is a variable
我试图以这样的递归方式制作斐波那契数列:
Option Explicit
Dim n, contador, termo
function fibonacci(n)
if n < 2 then
Return n
else
Return fibonacci(n-1) + fibonacci(n-2)
end if
End function
termo = InputBox("Diga ate que termo vai a sequencia de fibonacci")*1
for contador = 0 to termo
MsgBox fibonacci(contador)
next
但我收到错误:变量未定义:'Return'
我的代码有什么问题?
VBA 函数的 return 值未 return 使用 Return
关键字编辑。
事实上,Return
作为关键字的唯一有效用法是 return 来自 GoSub
跳转:
foo = 42
GoSub DoSomething
Debug.Print foo
DoSomething:
foo = foo / 2
Return
GoSub
跳转到DoSomething
标签,将foo
除以2和returns到调用子程序, 将 21 输出到 debug/immediate 窗格。
早于实际 Sub
和 Function
构造的古老关键字和构造。
那么函数return那么如何呢?
通过...(屏住呼吸并捏住鼻子)... 分配给函数的标识符:
Function GetFoo() As Integer
GetFoo = 42
End Function
属性 吸气剂相同:
Property Get Foo() As Integer
Foo = 42
End Property
最好的部分?这样做不会 return。它决定了return值。如果你需要立即退出(比如,因为有其他代码会 运行 否则),你需要使用 Exit Function
.
Function GetFoo() As Integer
GetFoo = 42
Exit Function
Debug.Print "dead code here"
End Function
当您想 return 函数的值时,您可以将该值设置为函数的名称,如下所示:
function fibonacci(n)
if n < 2 then
fibonacci = n
else
fibonacci = fibonacci(n-1) + fibonacci(n-2)
end if
End function
你的函数有一个逻辑错误,你的 for 循环是 returning termo + 1 个元素,因为你包含了元素 0、1、2 和 3。所以你可以将 for 循环设置为从 0 到 termo-1.
改为...
Function fibonacci(n)
If n < 1 Then
fibonacci = n
Else
fibonacci = n + fibonacci(n - 1)
End if
End Function
我试图以这样的递归方式制作斐波那契数列:
Option Explicit
Dim n, contador, termo
function fibonacci(n)
if n < 2 then
Return n
else
Return fibonacci(n-1) + fibonacci(n-2)
end if
End function
termo = InputBox("Diga ate que termo vai a sequencia de fibonacci")*1
for contador = 0 to termo
MsgBox fibonacci(contador)
next
但我收到错误:变量未定义:'Return' 我的代码有什么问题?
VBA 函数的 return 值未 return 使用 Return
关键字编辑。
事实上,Return
作为关键字的唯一有效用法是 return 来自 GoSub
跳转:
foo = 42
GoSub DoSomething
Debug.Print foo
DoSomething:
foo = foo / 2
Return
GoSub
跳转到DoSomething
标签,将foo
除以2和returns到调用子程序, 将 21 输出到 debug/immediate 窗格。
早于实际 Sub
和 Function
构造的古老关键字和构造。
那么函数return那么如何呢?
通过...(屏住呼吸并捏住鼻子)... 分配给函数的标识符:
Function GetFoo() As Integer
GetFoo = 42
End Function
属性 吸气剂相同:
Property Get Foo() As Integer
Foo = 42
End Property
最好的部分?这样做不会 return。它决定了return值。如果你需要立即退出(比如,因为有其他代码会 运行 否则),你需要使用 Exit Function
.
Function GetFoo() As Integer
GetFoo = 42
Exit Function
Debug.Print "dead code here"
End Function
当您想 return 函数的值时,您可以将该值设置为函数的名称,如下所示:
function fibonacci(n)
if n < 2 then
fibonacci = n
else
fibonacci = fibonacci(n-1) + fibonacci(n-2)
end if
End function
你的函数有一个逻辑错误,你的 for 循环是 returning termo + 1 个元素,因为你包含了元素 0、1、2 和 3。所以你可以将 for 循环设置为从 0 到 termo-1.
改为...
Function fibonacci(n)
If n < 1 Then
fibonacci = n
Else
fibonacci = n + fibonacci(n - 1)
End if
End Function