我试图以递归的方式制作斐波那契:
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
但是我收到错误:变量未定义:&#39;返回&#39; 我的代码出了什么问题?
答案 0 :(得分:5)
不会使用Return
关键字返回VBA函数的返回值。
事实上,Return
作为关键字的唯一有效用途是从GoSub
跳转返回:
foo = 42
GoSub DoSomething
Debug.Print foo
DoSomething:
foo = foo / 2
Return
GoSub
跳转到DoSomething
标签,将foo
除以2,将返回到调用子程序,输出21到调试/即时窗格
古老的Sub
和Function
构造之前的古老关键字和构造。
那么函数如何返回呢?
通过...(屏住呼吸,捏住鼻子)...... 分配功能的标识符:
Function GetFoo() As Integer
GetFoo = 42
End Function
属性getter相同:
Property Get Foo() As Integer
Foo = 42
End Property
最好的部分?这样做不会返回。它确定返回值。如果您需要立即退出(例如,因为还有其他代码会运行),您需要使用Exit Function
。
Function GetFoo() As Integer
GetFoo = 42
Exit Function
Debug.Print "dead code here"
End Function
答案 1 :(得分:0)
如果要返回函数的值,可以将该值设置为函数名称,如下所示:
function fibonacci(n)
if n < 2 then
fibonacci = n
else
fibonacci = fibonacci(n-1) + fibonacci(n-2)
end if
End function
你的函数有一个逻辑错误,你的for循环返回termo + 1元素,因为你包含元素0,1,2和3.所以你可以设置你的for循环从0到termo-1。
答案 2 :(得分:0)
更改为...
Function fibonacci(n)
If n < 1 Then
fibonacci = n
Else
fibonacci = n + fibonacci(n - 1)
End if
End Function