1. 程式人生 > >shell 指令碼中的遞迴

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