Go语言实现汉诺塔递归算法详解

Luna
Luna
发布时间:2026-10-14| 6人浏览过
原创

本文介绍了如何使用Go语言实现经典的汉诺塔问题求解算法。通过标准库处理用户输入,核心逻辑采用递归函数分治解决盘子移动步骤。代码包含完整的输入校验与移动路径打印功能,适合入门者理解递归思想及Go基础语法应用。

结果或目标

运行程序后,用户可以输入汉诺塔的盘子数量(正整数),程序将依次打印出每一层盘子从起始柱子移动到目标柱子的具体操作指令。

准备条件

  • 已安装 Go 语言环境并配置好GOPATH。
  • 创建文件 hano.go。

真实操作顺序

第1步:编写完整代码

在终端编辑器中打开 hano.go 文件,将以下代码写入。该代码实现了两个主要部分:主函数用于获取和验证用户输入,hanoi 函数负责核心的递归逻辑。

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	fmt.Print("输入要移动的盘子数:")
	reader := bufio.NewReader(os.Stdin)
lool:
	data, _, _ := reader.ReadLine()
	n, err := strconv.Atoi(string(data))
	if err != nil {
		fmt.Println(err)
		goto lool
	}
	hanoi(n, 'A', 'B', 'C')
}

func hanoi(n int, a, b, c byte) {
	if n > 1 {
		hanoi(n-1, a, c, b)
		fmt.Printf("%c-->%c\n", a, c)
		hanoi(n-1, b, a, c)
	} else {
		fmt.Printf("%c-->%c\n", a, c)
	}
}

第2步:编译并运行

在终端进入文件所在目录,执行以下命令:

go run hano.go

此时程序会等待输入。输入一个数字(例如 3)并按回车键,控制台将输出如下形式的移动过程:

A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C

第3步:理解代码逻辑

输入处理模块: 利用 bufio.NewReader 和 os.Stdin 获取用户输入。使用 strconv.Atoi 将字符串转为整数。若转换失败,通过 goto 语句跳转回标签 lool 处重新请求输入,确保参数有效性。

递归核心逻辑 (hanoi): 参数说明:n为当前待移动的盘子数,a为起始柱,b为辅助柱,c为目标柱。

  • 基本情况 (Base Case):当 n == 1 时,直接将盘子从柱子 a 移到柱子 c 并打印信息。
  • 递归步骤 (Recursive Step):当 n > 1 时:
    1. 将上面的 n-1 个盘子从 a 借助 c 移至 b(调用 hanoi(n-1, a, c, b))。
    2. 将第 n 个最大的盘子直接从 a 移至 c(打印 a-->c)。
    3. 将那 n-1 个盘子从 b 借助 a 移至 c(调用 hanoi(n-1, b, a, c))。

完成判断

当控制台按顺序输出了所有盘子从起点柱子到终点柱子的单次移动指令,且未报错时,即为执行成功。

以上就是Go语言实现汉诺塔递归算法的详细内容,更多关于Go语言算法的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。