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までカウントダウンします。

関連情報