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'"
我在这里定义了一个简单的 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'"