fact()
{
if [ $1 -eq 1 ]
then
return 1
else
y=`expr $1 - 1`
fact $y
b=$(($1 * $?))
return $b
fi
}
echo "enter"
read n
fact $n
echo "$?"
这是一个求数字阶乘的程序。输出在 5 以内都是正确的。6 的输出为 208,但正确答案为 720。是什么导致了此错误?
函数返回值最多只能达到 255:
a()
{
return 255
}
a
echo $?
b()
{
return 256
}
b
echo $?
生产:
$ bash x.sh
255
0
return
就好像exit
and exit
只能取最大 255 的值(http://www.unix.org/whitepapers/shdiffs.html http://www.unix.org/whitepapers/shdiffs.html).
一种替代方法是切换到迭代建议,如另一个答案中所述。
或者,您可以使用 echo 并以这种方式捕获递归输出:
#!/bin/bash
fact()
{
if [ $1 -eq 1 ]
then
echo 1
else
y=$(expr $1 - 1)
f=$(fact $y)
b=$(($1 * $f))
echo $b
fi
}
echo "enter"
read n
fact $n
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)