在 bash 中为递归函数的参数传递不同的值?

在 bash 中为递归函数的参数传递不同的值?

说我有以下内容:

n=10
function decrement {
    if [ $n -eq 0 ]; then
        echo recurse_done
    else
        echo $n
        decrement $(( $n-1 ))
    fi
}

decrement n

上面将创建一个无限调用递减功能并且n不会减少。我四处搜寻发现function $(( some_arithemtic_operation )),显然它不起作用..

答案1

您必须决定要传递给函数的参数:它是变量吗姓名或一个价值

如果它是一个名称,则需要间接变量扩展:

function decrement {
    local var=$1      
    if [[ ${!var} -eq 0 ]]; then
        echo recurse_done
    else
        echo ${!var}
        declare "$var=$(( ${!var} - 1))"
        decrement $var
    fi
}
decrement n

如果它是一种价值,你的生活会更简单

function decrement { 
    local value=$1
    if [[ $value -eq 0 ]]; then 
        echo recurse done
    else 
        echo $value
        decrement $((value-1))
    fi
}
decrement $n

但为什么这是递归的呢?seq $n -1 1将从 $n 倒数到 1

相关内容