2020-06-24|閱讀時間 ‧ 約 2 分鐘

LabVIEW-河內塔遞迴

    遞迴是個有點難理解的程式寫法

    階層的程式解還是難以令人完全掌握其用法

    我嘗試著用更多不同的題目來理解遞迴並用Labview的寫法重現

    關於遞迴的設定在 Labview裡的遞迴(Recursion) 裡有清楚的說明

     

    河內塔是三根竿子其中一根放了尤小到大N片有洞金片

    規則是比較大的金片一定要放下面,然後要把全部金片移到第三支竿

    簡化厚的解法公式只有三步:

    1.將A石柱的前n-1個金片搬到B石柱上

    2.將A石柱最大的金片搬到C石柱上

    3.將B石柱的n-1個金片搬到C石柱上

     

    Control A指的是最大金片所在的竿子, B是暫存用

    Control C指的是最大金片要移過去的竿子, 初始內容分別是A,B,C

    以四片當例子來看,解答為

    1.要把A最上面3片移到B

    2.最大的金片4由A移到C

    3.剛剛B的三片移到C

    除了第2步以外都還是未解開的,但是

    因為還是一樣的公式所以可以再呼叫程式自己來解

     

    以第1步來做說明

    呼叫出來的程式來說要解的題目已經變成: 把A的金片移到B(很重要)

    所以原本三個control內容要從A,B,C改成A,C,B, 解答為

    1.要把A最上面2片移到C

    2.最大的金片3由A移到B

    3.剛剛C的兩片移到B

    然後未解的部份繼續呼叫自己來解

    第三步的邏輯也是完全一樣

     

    另外設定遞迴終止的條件是竿子上只剩一片要移動,避免陷入無限循環。

    這邊把剩一片的case輸出文字做了一點調整以供辨認。

     

    執行結果:

     

    接下來要用Labview遞迴來處理8皇后問題

    分享至
    成為作者繼續創作的動力吧!
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    發表回應

    成為會員 後即可發表留言