易语言调用递归解决汉诺塔

汉诺塔盘子运动

.版本 2
 
.子程序 汉诺塔盘子运动
.参数 盘子数, 整数型
.参数 柱子甲, 文本型
.参数 柱子乙, 文本型
.参数 柱子丙, 文本型
 
.如果 (盘子数 = 1)
    ' 如果只有一个盘,则直接将它从柱子一移动到柱子三
    移动 (1, 柱子甲, 柱子丙)
.否则
    '1 ~ n - 1个盘从柱子一移动到柱子二,用柱子三作为中转
    汉诺塔盘子运动 (盘子数 - 1, 柱子甲, 柱子丙, 柱子乙)
    ' 把第n个盘从柱子一移动到柱子三
    移动 (盘子数, 柱子甲, 柱子丙)
    '1 ~ n - 1个盘从柱子二移动到柱子三,用柱子一作为中转
    汉诺塔盘子运动 (盘子数 - 1, 柱子乙, 柱子甲, 柱子丙)

移动

.版本 2
 
.子程序 移动
.参数 盘子号, 整数型
.参数 甲柱子, 文本型
.参数 乙柱子, 文本型
 
路径 = 路径 + “步骤” + 到文本 (步骤) + “:” + “把” + 到文本 (盘子号) + “号圆盘从柱子 ” + 甲柱子 + “ 移动到” + 乙柱子 + “上 ” + #换行符
步骤 = 步骤 + 1

执行

界面窗口放置四个编辑框,三个代表三个盘子,第四个设置盘子的个数。

.版本 2
 
.子程序 _计算图形按钮_被单击
.局部变量 盘子总数, 整数型
.局部变量 现在柱子, 文本型
.局部变量 中间柱子, 文本型
.局部变量 目标柱子, 文本型
 
' 把盘子编辑框.内容传给现在柱子
现在柱子 = 盘子编辑框.内容
' 把中间编辑框.内容传给中间柱子
中间柱子 = 中间编辑框.内容
' 把目标编辑框.内容传给目标柱子
目标柱子 = 目标编辑框.内容
.如果真 (到数值 (现在柱子) ≤ 0 或 到数值 (中间柱子) ≤ 0 或 到数值 (目标柱子) ≤ 0 或 到数值 (个数编辑框.内容) ≤ 0 或 到数值 (个数编辑框.内容) > 10)
    信息框 (“柱子或圆盘数量只能是大于0小于10的数字!”, #错误图标, “出现错误了:”)
    返回 ()
.如果真结束
 
盘子总数 = 到数值 (个数编辑框.内容)
结果编辑框.内容 = “”
路径 = “”
' 首次调用汉诺塔盘子运动 ()程序
汉诺塔盘子运动 (盘子总数, 现在柱子, 中间柱子, 目标柱子)
结果编辑框.内容 = 路径
步骤 = 1

发布日期:

所属分类: 易语言 标签: