shell 脚本中的递归

在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


猜你喜欢

转载自blog.csdn.net/irwin_chen/article/details/9411321