伊莉討論區

標題: 遞回 [打印本頁]

作者: 88663234    時間: 2014-2-20 11:46 PM     標題: 遞回

我想學VB6的遞迴,但不知道要從哪裡開始下手!!有哪位大大可以教我

作者: 皇臾    時間: 2014-2-21 08:11 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kludge    時間: 2014-2-23 01:12 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: Jeepluo    時間: 2014-2-27 10:39 PM

指令在合適的地方使用,有意想不到的效果,不同的功能應用得當,不但指令行數可以減少,還可以上速度變快,遞回當然也有他的用處,這東東還分傳值及傳址(可以同時回傳多個參數),有些時候do錯了,是會出不來的。
作者: 88663234    時間: 2014-2-27 10:52 PM

kludge 發表於 2014-2-23 01:12 AM
前輩說: 遞迴只應天上有, 凡人應該用迴圈
真的有必要才去用, 不然一般do就很好用了

這我知道,而且遞迴很吃記憶體,但老師教的東西有限,有很多還是要自己去學
而且我對寫程式很有興趣,所以大部分的語法跟邏輯我都OK,只是想學更多技巧而已
我現在再寫解術讀的程式,我用DO WHILE寫解一題還蠻難的題目要花2到3分鐘,但我看網路上用遞迴的卻連1秒鐘都不到,所以我才想學遞迴,請各位大大給我一點方向
作者: 88663234    時間: 2014-2-27 10:54 PM

皇臾 發表於 2014-2-21 08:11 AM
以程式角度來看,遞迴的方式就是:一個函式中執行的程式碼,會在呼叫自己。

請參考下列網址:

請問一下有沒有題目+做法
作者: 88663234    時間: 2014-2-27 11:16 PM

Jeepluo 發表於 2014-2-27 10:39 PM
指令在合適的地方使用,有意想不到的效果,不同的功能應用得當,不但指令行數可以減少,還可以上速度變快, ...

真的!!遞迴沒辦法除錯~哭哭,我不太會下他的終止條件
作者: Jeepluo    時間: 2014-3-2 08:47 AM

還是可以除錯的,除了可以 if  exit for 跳出廻圈或者指定第幾圈要做什麼事外,也可以使用 try 當程式發生錯誤時跳出種序。
作者: ddww354    時間: 2016-4-2 12:40 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: Waroger    時間: 2018-6-8 01:35 PM

有時候用遞迴寫真的方便很多
  1. '全排列
  2. Private Sub Command1_Click()
  3.     Dim a As String
  4.     a = "123"
  5.     Cls
  6.     cal_1 a, "", String(Len(a), " ")
  7. End Sub

  8. Sub cal_1(a As String, s As String, k As String)
  9.     Dim i As Integer, x As String
  10.    
  11.     If Len(s) = Len(a) Then Print s: Exit Sub
  12.    
  13.     For i = 1 To Len(a)
  14.         If Mid$(k, i, 1) = " " Then
  15.            x = k: Mid$(x, i, 1) = "*"
  16.            cal_1 a, s & Mid(a, i, 1), x
  17.         End If
  18.     Next
  19. End Sub

  20. '6組號碼3星連碰
  21. Private Sub Command2_Click()
  22.     Dim r() As String, s() As String, a As String
  23.    
  24.     a = "1 2 3 4 5 6"
  25.     r = Split(a)
  26.     Cls
  27.     Call cal_2(r(), s(), 0, 0)
  28. End Sub

  29. Sub cal_2(r() As String, s() As String, p As Integer, t As Integer)
  30.     If t = 3 Then Print Join(s, ","): Exit Sub
  31.     For i = p To UBound(r)
  32.         ReDim Preserve s(t): s(t) = r(i)
  33.         Call cal_2(r(), s(), i + 1, t + 1)
  34.     Next
  35. End Sub

  36. Private Sub Form_Load()
  37.     AutoRedraw = True
  38. End Sub
複製代碼

作者: ozakl760206    時間: 2019-1-19 09:44 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: Jeepluo    時間: 2019-4-15 10:16 AM

本帖最後由 Jeepluo 於 2019-4-15 10:17 AM 編輯
  1. ' 記得開頭用 function 的方式即可,傳回的方式分為傳址及及傳值
  2. ' 傳值(處理結果)方式比較簡單:把處理後的結果傳回即可,可以用「變更名」,也可以用 return 回傳
  3. ' 傳址的話,如以下的範例可以傳回兩個值 一個是「變更名」的處理結果,一個是「傳入值n」的處理結果,但傳入的方式須改為 (ByVal n Integer), 此方式開頭也可使用 sub

  4. Function 變更名(ByVal n As Integer) As Integer ' 傳回數值
  5.     If n <= 1 Then
  6.         Return 1
  7.     Else
  8.         Return n * 6
  9.     End If
  10. End Function
複製代碼





歡迎光臨 伊莉討論區 (http://a04.eyny.com/) Powered by Discuz!