遞迴是個有點難理解的程式寫法
階層的程式解還是難以令人完全掌握其用法
我嘗試著用更多不同的題目來理解遞迴並用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皇后問題