LabVIEW-河內塔遞迴

2020/06/24閱讀時間約 1 分鐘

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

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

我嘗試著用更多不同的題目來理解遞迴並用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

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

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

raw-image

 

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

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

raw-image

 

執行結果:

raw-image

 

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

    5會員
    56內容數
    ktest
    留言0
    查看全部
    發表第一個留言支持創作者!