首页 > 解决方案 > 如何递归地找到数字的总和

问题描述

我需要递归地找到shell中的数字总和。但我有一个错误:第 10 行:5 + :语法错误:预期操作数(错误标记是“+”)

function countofnumbers
{
    if [ $1 -lt 10 ]
    then
        return $1
    else
        let z=$1/10
        let result=expr`$(($(( $1 % 10 )) + $(countofnumbers $z)))`
    fi
    return $result
}
z=15
echo $(countofnumbers $z)

标签: bashshell

解决方案


你很接近,干得好!

function countofnumbers {
    if [ $1 -lt 10 ]
    then
        echo $1
    else
        z=$(( $1 / 10 ))
        result=$(( $(( $1 % 10 )) + $(countofnumbers $z) ))
    fi
    echo $result
}

这是我所做的更改:

z=$(( $1 / 10 ))

每次在 bash 中进行数学运算时,将其包装在算术运算符$(( ))中。虽然let效果也不错,但您似乎或多或少地随机组合了所有 3 种样式( expr, let, )。$(( ))如果您坚持一种风格,您的代码将更具可读性。

result=$(( $(( $1 % 10 )) + $(count $z) ))

你只是在这个周围有太多的东西。仅算术运算符就足够了。expr是算术运算符的另一种形式,但我们在这里不需要它。

return $1
return $result

Bashreturn不像任何其他编程语言。return是指返回码,是一个0-255的数字,主要用于表示是否发生错误。结果就像您想象的那样被捕获,例如,

mynum=$(countofnumbers 12)
echo $mynum
> 3

推荐阅读