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까지 카운트다운됩니다.

관련 정보