Bash 递归函数未正确执行

Bash recursive function not executing properly

我在这里定义了一个简单的 factorial 递归函数。它工作正常,直到 num=5 但稍后,它开始提供垃圾值。我正在从用户那里读取 num,然后将其输入递归函数。我无法弄清楚这个问题,因为我是 bash.

的算术方面的新手
function fact {
    if (( ==1 ))
    then
        return 1
    else
        prev=$(( -1 ))
        fact $prev
        prev_fact=$?
        this_fact=$( expr  \* $prev_fact )
        # this_fact=$((  * $prev_fact )) This also works the same way as above
        return $this_fact
    fi
}

echo -n "Enter the number: "
read num
fact $num
val=$?
echo "Factorial of "$num" is "$val""

Return 代码限制在 0-255 范围内。这对 ol' fact 来说是个坏消息,因为任何大于 5! = 120 的东西都会溢出。

Return 代码旨在用于表示成功和失败,不适用于一般整数数据。要“return”一个函数的值,您应该将它回显到标准输出并在调用者中使用 $(...) 来捕获它。

function fact {
    if (( == 1))
    then
        echo 1
    else
        prev=$(( - 1))
        prev_fact=$(fact "$prev")
        echo $(( * prev_fact))
    fi
}

或者只使用这个变量 $var 到 store/print 数据

fact(){
    (( > 1)) && {
         local prev=$(( - 1))
         fact $prev
         val=$(( * $val))
    } || val=1
}

read -p "Enter the number: " num
fact $num
echo "Factorial of '$num' is '$val'"