FIBONACCI-顺推

来源:互联网 发布:九次方大数据上市2016 编辑:程序博客网 时间:2024/05/17 05:15

公元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 IntegerWith Sheet2n = .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)) = arrOutEnd WithEnd Sub'Main ProgramFunction Fibo(n)If n = 0 Then  Fibo = 0ElseIf n = 1 Then  Fibo = 1Else  Fibo = Fibo(n - 2) + Fibo(n - 1)End If  arrOut(n, 1) = n: arrOut(n, 2) = FiboEnd Function


 


'//程序用以计算斐波那契函数Public arrOut()Sub Fibonacci()Dim n As Integer, Result As IntegerWith Sheet2n = .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)) = arrOutEnd WithEnd Sub'Main ProgramFunction Fibo(n)If n = 0 Then  Fibo = 0ElseIf n = 1 Then  Fibo = 1Else  Fibo = Fibo(n - 2) + Fibo(n - 1)End If  arrOut(n, 1) = n: arrOut(n, 2) = FiboEnd Function


 

 

 

 

0 0
原创粉丝点击