⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hanoi.bash

📁 一本完整的描述Unix Shell 编程的工具书的所有范例
💻 BASH
字号:
#! /bin/bash## The Towers Of Hanoi# Bash script# Copyright (C) 2000 Amit Singh. All Rights Reserved.# http://hanoi.kernelthread.com## Last tested under bash version 2.05b.0(13)-release##  Used in "Advanced Bash Scripting Guide"#+ with permission of script author.#  Slightly modified and commented by ABS author.#=================================================================##  The Tower of Hanoi is a mathematical puzzle attributed to#+ Edouard Lucas, a nineteenth-century French mathematician.##  There are three vertical posts set in a base.#  The first post has a set of annular rings stacked on it.#  These rings are flat disks with a hole drilled out of the center,#+ so they can slip over the posts.#  The rings have different diameters, and they stack in descending#+ order, according to size.#  The smallest ring is on top, and the largest on the bottom.##  The task is to transfer the stack of rings#+ to one of the other posts.#  You can move only one ring at a time to another post.#  You are permitted to move rings back to the original post.#  You may place a smaller ring atop a larger one,#+ but *not* vice versa.#  Again, it is forbidden to place a larger ring atop a smaller one.##  For a small number of rings, only a few moves are required.#+ For each additional ring,#+ the required number of moves approximately doubles,#+ and the "strategy" becomes increasingly complicated.##  For more information, see http://hanoi.kernelthread.com.###         ...                   ...                    ...#         | |                   | |                    | |#        _|_|_                  | |                    | |#       |_____|                 | |                    | |#      |_______|                | |                    | |#     |_________|               | |                    | |#    |___________|              | |                    | |#   |             |             | |                    | |# .--------------------------------------------------------------.# |**************************************************************|#          #1                   #2                      #3##=================================================================#E_NOPARAM=66  # No parameter passed to script.E_BADPARAM=67 # Illegal number of disks passed to script.Moves=        # Global variable holding number of moves.              # Modifications to original script.dohanoi() {   # Recursive function.    case $1 in    0)        ;;    *)        dohanoi "$(($1-1))" $2 $4 $3        echo move $2 "-->" $3	let "Moves += 1"  # Modification to original script.        dohanoi "$(($1-1))" $4 $3 $2        ;;    esac}case $# in1)    case $(($1>0)) in     # Must have at least one disk.    1)        dohanoi $1 1 3 2        echo "Total moves = $Moves"        exit 0;        ;;    *)        echo "$0: illegal value for number of disks";        exit $E_BADPARAM;        ;;    esac    ;;*)    echo "usage: $0 N"    echo "       Where \"N\" is the number of disks."    exit $E_NOPARAM;    ;;esac# Exercises:# ---------# 1) Would commands beyond this point ever be executed?#    Why not? (Easy)# 2) Explain the workings of the workings of the "dohanoi" function.#    (Difficult)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -