我这个自定义函数错在哪?

来源:百度知道 编辑:UC知道 时间:2024/04/29 23:26:25
有这么一个数列,1、1、3、5、9……,从第3个数开始,每个数比前面两数的和多1,我编写了一个自定义函数来求数列中某一个数的值,但是运行时报下标越界。这是我的代码:
Private Function Calculate(WhichNo As Integer) As Double
Dim SuZu() As Double
SuZu(0) = 1
SuZu(1) = 1
For WhichNo = 2 To WhichNo + 1
SuZu(WhichNo) = SuZu(WhichNo - 1) + SuZu(WhichNo - 2) + 1
Next WhichNo
Calculate = SuZu(WhichNo)
End Function
好象不对,我用Print Calculate(Val(Text1.Text)),然后在Text1中输入6,结果在窗体上显示两列数,第一列是2、3、4、5、15,第二列为3、5、9、15

Private Function Calculate(WhichNo As Integer) As Double
Dim SuZu() As Double
ReDim SuZu(WhichNo - 1) As Double
SuZu(0) = 1
SuZu(1) = 1
For i = 2 To WhichNo - 1
SuZu(i) = SuZu(i - 1) + SuZu(i - 2) + 1
Print i, SuZu(i)
Next i
Calculate = SuZu(WhichNo - 1)
End Function

忘了说明,
Print i, SuZu(i) 这句是我测试时留下的,你可以前面加"'"将其注释掉或删除.

本函数返回值是数列中的第WhichNo项,如果你输入的是6,返回值是15
项--值
1---1
2---1
3---3
4---5
5---9
6---15
以上方法,虽然可行,但对代码占用内存大
=========更为简洁的代码如下
Private Function Calculate(WhichNo As Integer) As Double
a = 1
b = 1
For i = 3 To WhichNo
c = a + b + 1
a = b
b = c
Next i
Calculate = c
End Function