我factorial在這里定義了一個簡單的遞回函式。它作業正常,直到num=5后來,它開始給出垃圾值。我正在num從用戶那里讀取,然后將其輸入到遞回函式中。我無法弄清楚這個問題,因為我是 bash 算術方面的新手。
function fact {
if (( $1==1 ))
then
return 1
else
prev=$(( $1-1 ))
fact $prev
prev_fact=$?
this_fact=$( expr $1 \* $prev_fact )
# this_fact=$(( $1 * $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""
uj5u.com熱心網友回復:
回傳代碼限制在 0-255 的范圍內。這對 ol' 來說是個壞訊息,fact因為任何大于它的東西5! = 120都會溢位。
回傳碼旨在用于表示成功和失敗,而不是用于一般整數資料。要從函式“回傳”一個值,您應該將其回顯到 stdout 并$(...)在呼叫者中使用以捕獲它。
function fact {
if (($1 == 1))
then
echo 1
else
prev=$(($1 - 1))
prev_fact=$(fact "$prev")
echo $(($1 * prev_fact))
fi
}
uj5u.com熱心網友回復:
或者只是使用這個變數 $var 來存盤/列印資料
fact(){
(($1 > 1)) && {
local prev=$(($1 - 1))
fact $prev
val=$(($1 * $val))
} || val=1
}
read -p "Enter the number: " num
fact $num
echo "Factorial of '$num' is '$val'"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/337431.html
上一篇:用遞回將字串字符加倍
