リュカ数列
初項および第 2 項をそれぞれ
で定義される数列をリュカ数列とよび、この数列の各項をリュカ数 (Lucas number)といいます。一般項は
で与えられます。ここに
VBA でリュカ数列生成マクロを定義して最初の 20 項を表示させてみましょう。
'[VBA]リュカ数列(Lucas number)生成マクロ
Sub Lucas()
Dim i As Long
Dim L(20) As Long
'初項と第2項のリュカ数
L(0) = 2
L(1) = 1
'L(2)~L(19)までのリュカ数列を生成
For i = 2 To 19
L(i) = L(i - 2) + L(i - 1)
Next i
'L(0)~L(19)までのリュカ数列を表示
For i = 0 To 19
Debug.Print L(i);
Next i
End Sub
'2 1 3 4 7 11 18 29 47 76
'123 199 322 521 843 1364 2207 3571 5778 9349
任意の
一般項を使うと無理数の計算で丸め誤差が出る(しかもリターンが Double になってしまう)ので、きちんと漸化式を使って計算させます。
'[VBA]リュカ数を取得するユーザー定義関数
Function LucasNumber(n As Long) As Long
Dim k As Long
Dim L() As Long
ReDim L(n)
'初項と第2項のリュカ数
L(0) = 2
L(1) = 1
'L(2)~L(n)までのリュカ数列を生成
If n > 1 Then
For k = 2 To n
L(k) = L(k - 2) + L(k - 1)
Next k
End If
LucasNumber = L(n)
End Function
'[VBA] リュカ数L_19を取得
Sub Test_LucasNumber()
Debug.Print LucasNumber(19)
End Sub
'9349
'[VBA]リュカ数列を利用して黄金比の近似値を計算
Sub GoldenRatio()
Debug.Print LucasNumber(40) / LucasNumber(39)
End Sub
'1.61803398874989
エクセルや数学に関するコメントをお寄せください