|
663973866 发表于 2014-11-13 16:22 
斐波那契数列计算到n为30的时候就开始变慢了 请问有什么解决的方案嘛~
我的电脑上也是差不多到n=30就慢了,到n=40,已经达到6分钟。
使用循环代替递归,n=40,仅0.2秒不到。
下面是我的代码:- Function fblq(n&, a) '递归版
- ' Dim arr&(n)
- Static a1
- a1 = a1 + 1
- If n <= 2 Then
- fblq = 1
- Else:
- fblq = fblq(n - 2, a) + fblq(n - 1, a)
- End If
- a(0) = a1
- ' fblq = arr(n)
- End Function
- Sub 测试斐波拉契数列()
- Dim i&, r, c, tim1, tim2, a()
- ReDim a(1)
- tim1 = Timer
- For i = 1 To 40
- Cells(Int((i - 1) / 10) + 3, (i - 1) Mod 10 + 1) = fblq(i, a)
- Next i
- tim2 = Timer
- Cells(1, 2) = tim2 - tim1
- Cells(2, 2) = a(0)
- End Sub
- Function fblq2(n%, a) As Double '循环版
- Dim arr() As Double
- ReDim arr(n)
- ' Static a1
- Dim i
- 'a1 = a1 + 1
- If n <= 2 Then
- arr(n) = 1
- Else:
- arr(1) = 1
- arr(2) = 1
-
- For i = 3 To n
- a = a + 1
- arr(i) = arr(i - 2) + arr(i - 1)
- Next i
- End If
-
- fblq2 = arr(n)
- End Function
- Sub 测试斐波拉契数列2()
- Dim i%, r, c, tim1, tim2, a
- tim1 = Timer
- For i = 1 To 40
- a = 0
- Cells(Int((i - 1) / 10) + 8, (i - 1) Mod 10 + 1) = fblq2(i, a)
- Cells(Int((i - 1) / 10) + 18, (i - 1) Mod 10 + 1) = a
-
- Next i
- tim2 = Timer
- Cells(1, 1) = tim2 - tim1
- End Sub
复制代码 |
|