查看完整版本: 遞回
頁: [1]

88663234 發表於 2014-2-20 11:46 PM

遞回

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

皇臾 發表於 2014-2-21 08:11 AM

以程式角度來看,遞迴的方式就是:一個函式中執行的程式碼,會在呼叫自己。

請參考下列網址:
http://msdn.microsoft.com/zh-tw/library/81tad23s.aspx

kludge 發表於 2014-2-23 01:12 AM

前輩說: 遞迴只應天上有, 凡人應該用迴圈
真的有必要才去用, 不然一般do就很好用了

如果真的要寫, 建議是先寫回來的判斷式(通常不超過20行的程式)
確認遞迴可以執行且返回無誤, 其他就如樓上所說: 呼叫自己
沒呼叫就大家可以回家啦

Jeepluo 發表於 2014-2-27 10:39 PM

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

88663234 發表於 2014-2-27 10:52 PM

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



這我知道,而且遞迴很吃記憶體,但老師教的東西有限,有很多還是要自己去學
而且我對寫程式很有興趣,所以大部分的語法跟邏輯我都OK,只是想學更多技巧而已
我現在再寫解術讀的程式,我用DO WHILE寫解一題還蠻難的題目要花2到3分鐘,但我看網路上用遞迴的卻連1秒鐘都不到,所以我才想學遞迴,請各位大大給我一點方向...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

88663234 發表於 2014-2-27 10:54 PM

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

請參考下列網址:


請問一下有沒有題目+做法

88663234 發表於 2014-2-27 11:16 PM

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

真的!!遞迴沒辦法除錯~哭哭,我不太會下他的終止條件

Jeepluo 發表於 2014-3-2 08:47 AM

還是可以除錯的,除了可以 if  exit for 跳出廻圈或者指定第幾圈要做什麼事外,也可以使用 try 當程式發生錯誤時跳出種序。

ddww354 發表於 2016-4-2 12:40 PM

88663234 發表於 2014-2-27 11:16 PM static/image/common/back.gif
真的!!遞迴沒辦法除錯~哭哭,我不太會下他的終止條件

小弟也是初學都,也想來學遞迴,但看起來真的很難啊,請有什麼資料可以參考嗎

Waroger 發表於 2018-6-8 01:35 PM

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

Sub cal_1(a As String, s As String, k As String)
    Dim i As Integer, x As String
   
    If Len(s) = Len(a) Then Print s: Exit Sub
   
    For i = 1 To Len(a)
        If Mid$(k, i, 1) = " " Then
           x = k: Mid$(x, i, 1) = "*"
           cal_1 a, s & Mid(a, i, 1), x
        End If
    Next
End Sub

'6組號碼3星連碰
Private Sub Command2_Click()
    Dim r() As String, s() As String, a As String
   
    a = "1 2 3 4 5 6"
    r = Split(a)
    Cls
    Call cal_2(r(), s(), 0, 0)
End Sub

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

Private Sub Form_Load()
    AutoRedraw = True
End Sub...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

ozakl760206 發表於 2019-1-19 09:44 AM

可以去查高普考程式語言的題目,滿多要求用遞迴寫
你會發現有些東西用遞迴寫真的比較簡單(超少)
而且效率真的有差(迴圈佳) 瞭解運作原理就好

Jeepluo 發表於 2019-4-15 10:16 AM

本帖最後由 Jeepluo 於 2019-4-15 10:17 AM 編輯


' 記得開頭用 function 的方式即可,傳回的方式分為傳址及及傳值
' 傳值(處理結果)方式比較簡單:把處理後的結果傳回即可,可以用「變更名」,也可以用 return 回傳
' 傳址的話,如以下的範例可以傳回兩個值 一個是「變更名」的處理結果,一個是「傳入值n」的處理結果,但傳入的方式須改為 (ByVal n Integer), 此方式開頭也可使用 sub

Function 變更名(ByVal n As Integer) As Integer ' 傳回數值
    If n <= 1 Then
        Return 1
    Else
        Return n * 6
    End If
End Function...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]