我的原始代码:
# Factorial Using Recursion
res=1
fact()
{
x=$1
if [ $x -le 1 ]
then
echo "Actual - $res"
return `expr $res`
else
#echo $x
res=$(($res * $x))
echo "($res)"
fact $[$x-1]
fi
}
fact $1
echo "Factorial of $1 = $?"
结果(存储在$res
)肯定是我想要的,也是正确的。但不知何故,当它被$?
返回并被捕获时,它就会变得错误。
答案 0 :(得分:4)
返回代码的最大值为255
,因此您无法返回大多数整数的阶乘。
相反,您的函数应该将值输出到标准输出,例如使用echo
。捕获函数的输出,如result=$(fact "$x")
。
如果要在执行功能时输出其他信息,则可以使用echo 'whatever' >&2
打印到标准错误。
res=1
fact()
{
x=$1
if [ "$x" -le 1 ]
then
echo "$res"
else
res=$((res * x))
fact "$((x - 1))"
fi
}
我还修改了你的语法。