在 Golang 中實現漢諾塔
在本文中,我們將學習如何使用遞迴方法和迭代來在 Golang 中實現漢諾塔。漢諾塔是一個謎題,其中我們將一組圓盤從一個頁面移動到另一個頁面,每次移動一個圓盤。在這個謎題中,需要遵守某些規則。
使用遞迴方法
在這種方法中,我們將編寫一個 Go 語言程式,使用遞迴方法來實現漢諾塔。
如果 n 為 1,我們可以直接將圓盤從 from 移動到 to。否則,我們首先將 n-1 個圓盤從 from 移動到 via,然後將第 n 個圓盤從 from 移動到 to,最後將 n-1 個圓盤從 via 移動到 to。
演算法
步驟 1 − 首先,我們需要匯入 fmt 包。
步驟 2 − 然後,建立一個名為 hanoi() 的函式。此函式接受三個引數,第一個是傳遞的字串變數的數量,其他是字串變數。
步驟 3 − 然後開始 main() 函式。在 main() 中,透過傳遞所需的引數來呼叫 hanoi() 函式。
步驟 4 − 如果 n == 1,則將圓盤從 from 樁移動到 to 樁並停止程式。否則,使用 n – 1、from 樁、via 樁和 to 樁作為引數遞迴呼叫 hanoi() 函式,並使用 fmt.Println() 函式在螢幕上列印結果。
示例
在下面的示例中,我們將瞭解如何開發一個 Go 語言程式,使用遞迴方法來實現漢諾塔
package main
import "fmt"
func hanoi(n int, from string, to string, via string) {
if n == 1 {
fmt.Printf("Move disk 1 from %s to %s\n", from, to)
} else {
hanoi(n-1, from, via, to)
fmt.Printf("Move disk %d from %s to %s\n", n, from, to)
hanoi(n-1, via, to, from)
}
}
func main() {
hanoi(3, "A", "C", "B")
}
輸出
Move disk 1 from A to C Move disk 2 from A to B Move disk 1 from C to B Move disk 3 from A to C Move disk 1 from B to A Move disk 2 from B to C Move disk 1 from A to C
使用迭代的概念
在這種方法中,我們將編寫一個 Go 語言程式,使用迭代的概念來實現漢諾塔。
語法
func len(v Type) int
len() 函式用於獲取任何引數的長度。它將要查詢長度的資料型別變數作為引數,並返回表示變數長度的整數值。
func append(slice, element_1, element_2…, element_N) []T
append 函式用於向陣列切片新增值。它接受多個引數。第一個引數是要新增值的陣列,後跟要新增的值。然後,該函式返回包含所有值的最終陣列切片。
演算法
步驟 1 − 首先,我們需要匯入 fmt 包。
步驟 2 − 接下來建立一個名為 hanoi() 的函式。此函式接受四個引數。第一個是表示字串數量的整數值,而其他是字串變數。
步驟 3 − 在此函式內部建立一個名為 stack 的空陣列,並將作為引數獲得的變數儲存在其中。
步驟 4 − 然後使用 for 迴圈遍歷 stack 陣列,並使用 for 迴圈透過 fmt.Println() 函式在螢幕上列印各種樁位置。
示例
在下面的示例中,我們將瞭解如何開發一個 Go 語言程式,使用迭代的概念來實現漢諾塔
package main
import "fmt"
func hanoi(n int, from string, to string, via string) {
stack := make([][3]string, 0)
stack = append(stack, [3]string{from, to, via})
for len(stack) > 0 {
task := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if n == 1 {
fmt.Printf("Move disk 1 from %s to %s\n", task[0], task[1])
} else {
stack = append(stack, [3]string{task[2], task[1], task[0]})
stack = append(stack, [3]string{task[0], task[1], task[2]})
stack = append(stack, [3]string{task[1], task[2], task[0]})
n--
}
}
}
func main() {
hanoi(3, "A", "C", "B")
}
輸出
Move disk 1 from B to A Move disk 1 from C to B Move disk 1 from A to B Move disk 1 from A to C Move disk 1 from B to C
結論
我們已成功編譯並執行了一個 Go 語言程式來實現漢諾塔以及示例。我們將使用兩種不同的方法來實現這一點。在第一種方法中,我們使用遞迴方法,而在第二種方法中,我們使用迭代方法。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP