[.NET] 費氏數列(跑得很慢)

看板Visual_Basic作者 (雞爪)時間16年前 (2008/08/07 02:28), 編輯推噓3(3014)
留言17則, 6人參與, 最新討論串1/1
小弟正在自學asp.net2.0 ,用vb.net開發 做到一題,要我把費氏數列從1顯示到1836311903 以下是程式碼 ------------------------------------------------------------------------------- Partial Class _Default Inherits System.Web.UI.Page ------------------------------------------------------------------------------- Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim i As Integer Dim j As Integer = 10000000 For i = 0 To j Response.Write(fib(i) & "、") If fib(i) >= 1836311903 Then Exit For End If Next End Sub ------------------------------------------------------------------------------- Function fib(ByVal x As Integer) If x = 0 Or x = 1 Then Return 1 Else Return fib(x - 1) + fib(x - 2) End If End Function End Class 如果是輸出到小一點的數還可以,但這題要到1836311903 我放了快一小時都還沒跑出答案 請問有比較快的解法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.94.25

08/07 03:34, , 1F
把算過的數字都先存下來,可以省不少時間
08/07 03:34, 1F

08/07 03:54, , 2F
在我的 nb 上,使用 cache 可以在 0.04 秒內算完
08/07 03:54, 2F

08/07 03:54, , 3F
不用 cache 的話,超過 30 秒 (然後我就懶得等了)
08/07 03:54, 3F

08/07 14:30, , 4F
不要用recursion, 改寫iterative的算法
08/07 14:30, 4F

08/07 14:30, , 5F
算到多少都很簡單,就是一瞬間而已
08/07 14:30, 5F

08/07 15:30, , 6F
我不太懂樓上的意思,可以舉個例嗎?
08/07 15:30, 6F

08/07 17:16, , 7F
你現在寫的叫做recursion
08/07 17:16, 7F

08/08 14:15, , 8F
那iterative要怎麼寫呢?
08/08 14:15, 8F

08/08 16:28, , 9F
去找一本資料結構的書,裡面9成會有這個範例..
08/08 16:28, 9F

08/08 23:11, , 10F
這個題目當然是要 Dynamic Programming 啊 比iter還快.
08/08 23:11, 10F

08/09 02:07, , 11F
不懂樓上的意思...
08/09 02:07, 11F

08/12 20:56, , 12F
DP 動態規劃
08/12 20:56, 12F

08/12 20:57, , 13F
用陣列去跑
08/12 20:57, 13F

08/12 20:57, , 14F
fib(1)=1
08/12 20:57, 14F

08/12 20:57, , 15F
fib(2)=1
08/12 20:57, 15F

08/12 20:58, , 16F
然後用迴圈去跑
08/12 20:58, 16F

08/12 20:58, , 17F
fib(i) = fib(i-1) + fib(i-2)
08/12 20:58, 17F
文章代碼(AID): #18cUqu8q (Visual_Basic)