研究一下算法
有谁用shell写个汉诺塔的算法来呀?递归非递归都可以,我只用C写过,Shell不会 弱弱的问,啥是什么什么塔?:cry: ~(!*)@&#)(&!)($)!*$^*!&^*()&!(^$*(&!%^@#!@#
计算机专业应该会知道的 ~(!*)@&#)(&!)($)!*$^*!&^*()&!(^$*(&!%^@#!@#
计算机专业应该会知道的
偶不是这个专业滴:evil:
move() {
echo "Move disc $2 from $1 to $3"
}
hanoi() {
if [ "$1" == "1" ]
then
move $2 1 $4
else
hanoi $[ $1-1 ] $2 $4 $3
move $2 $1 $4
hanoi $[ $1-1 ] $3 $2 $4
fi
}
hanoi $1 "x" "y" "z"
exit 0
把这段代码保存为一个脚本(比如就叫hanoi),然后运行sh hanoi x就可以了(x用一个数字代替,表示圆盘的个数)
另外,代码没有加任何的合法性判断,只做算法演示之用 能不能用非递归的试试? 非递归就要长点了,个人认为,hanoi问题写非递归没任何意义
declare -a arrN
declare -a arrX
declare -a arrY
declare -a arrZ
move() {
echo "Move disc $2 from $1 to $3"
}
push() {
arrN[`expr $1+1`]=`expr $5 - 1`
arrX[`expr $1+1`]="$2"
arrY[`expr $1+1`]="$3"
arrZ[`expr $1+1`]="$4"
}
hanoi() {
top=0
while [ "$top" -ge "0" ]
do
while [ "${arrN[$top]}" -gt "1" ]
do
push $top "${arrX[$top]}" "${arrZ[$top]}" "${arrY[$top]}" "${arrN[$top]}"
let "top += 1"
done
if [ "${arrN[$top]}" -eq "1" ]
then
move "${arrX[$top]}" 1 "${arrZ[$top]}"
let "top -= 1"
fi
if [ "$top" -ge "0" ]
then
move "${arrX[$top]}" ${arrN[$top]} "${arrZ[$top]}"
push `expr $top - 1` "${arrY[$top]}" "${arrX[$top]}" "${arrZ[$top]}" ${arrN[$top]}
fi
done
}
arrX[0]="X"
arrY[0]="Y"
arrZ[0]="Z"
arrN[0]=$1
hanoi
unset arrX
unset arrY
unset arrZ
unset arrN
exit 0
用法和上面递归的一样
非递归就要长点了,个人认为,hanoi问题写非递归没任何意义
页:
[1]