关闭

FIBONACCI-顺推

55人阅读 评论(0) 收藏 举报
分类:

公元1202年欧洲数学家伦纳德·斐波那契在他所著的《珠算的书》(Liber Abbaci)中有这样一道习题:假定每对兔子每个月生出一对兔子。新生的兔子一个月后有了生育能力,再过一个月又生出一对兔子。那么买一对新生的兔子回来,一年后有多少对兔子?

显然,第一个月有一对,第二个月还是一对,第三个月有两对,第四个月有三对,第五个月有五对……容易推得,某月的兔子数正好是前两个月兔子数之和。如果用F(n)表示第n个月的兔子数,则当n>2时有:

F(n)=F(n1)+F(n2) n3

F(1)=F(2)=1

若定义F(0)=1,则可以写成:

F(n)=F(n1)+F(n2)n2

F(0)=1,F(1)=1

这个数列称为斐波那契数列。上面的表达式是该数列的递归定义,其终止条件是n=1n=1,递归形式是F(n)=F(n1)+F(n2)。即当n2时,函数F(n)用它本身在自变量较小的两个点处的值来(递归)表示,这个递归表示向着终止条件(n=0,n=1)变化,所以这个问题可以递归求解。可以写一个VB的函数过程来计算第n个斐波那契数。

当n=5时,fib(5)的计算过程如下:

fib(5)

=fib(4) + fib(3)

=(fib(3) + fib(2)) + (fib(2) + fib(1))

=((fib(2) + fib(1)) + (fib(1) + fib(0))) +((fib(1) + fib(0)) + fib(1))

=(((fib(1) + fib(0)) + fib(1)) + (fib(1) +fib(0))) + ((fib(1) + fib(0)) + fib(1))

=1+0+1+0+1+0+0+1=5

以下是用顺推法计算FIBONACCI数列

'//程序用以计算斐波那契函数
Public arrOut()
Sub Fibonacci()
Dim n As Integer, Result As Integer
With Sheet2
n = .Cells(2, 2)
ReDim arrOut(0 To n + 1, 1 To 2)
'输出
Result = Fibo(n)    '求最值
.Cells(3, 2) = Result
.Cells(6, 1).Resize(UBound(arrOut), UBound(arrOut, 2)) = arrOut
End With
End Sub
'Main Program
Function Fibo(n)
If n = 0 Then
  Fibo = 0
ElseIf n = 1 Then
  Fibo = 1
Else
  Fibo = Fibo(n - 2) + Fibo(n - 1)
End If
  arrOut(n, 1) = n: arrOut(n, 2) = Fibo

End Function



 


'//程序用以计算斐波那契函数
Public arrOut()
Sub Fibonacci()
Dim n As Integer, Result As Integer
With Sheet2
n = .Cells(2, 2)
ReDim arrOut(0 To n + 1, 1 To 2)
'输出
Result = Fibo(n)    '求最值
.Cells(3, 2) = Result
.Cells(6, 1).Resize(UBound(arrOut), UBound(arrOut, 2)) = arrOut
End With
End Sub
'Main Program
Function Fibo(n)
If n = 0 Then
  Fibo = 0
ElseIf n = 1 Then
  Fibo = 1
Else
  Fibo = Fibo(n - 2) + Fibo(n - 1)
End If
  arrOut(n, 1) = n: arrOut(n, 2) = Fibo
End Function


 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1787次
    • 积分:49
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:9篇
    • 译文:0篇
    • 评论:0条
    文章存档