在shell脚本中,变量默认都是全局的。所以递归调用时需要使用local关键字来显示标识局部变量,这样就可以实现函数的递归调用。
自己写了个递归算阶乘的脚本,发现当N=7之前都正常,之后就计算结果错误了。后来发现$?取函数的返回值时,这个数字的上限是很小的,只到255。所以后来使用了一个全局变量来保存每次递归的结果。
#!/bin/bash
N=$1
RET=1
function multi()
{
local LOCAL_N=$1
local LOCAL_N_SUB_1=$(($LOCAL_N - 1))
if [ $LOCAL_N_SUB_1 -lt 1 ]
then
RET=1
else
multi $LOCAL_N_SUB_1
RET=`expr $LOCAL_N \* $RET`
fi
}
multi $N
echo $RET