![Bashで再帰関数のパラメータに異なる値を渡しますか? [閉鎖]](https://linux33.com/image/84014/Bash%E3%81%A7%E5%86%8D%E5%B8%B0%E9%96%A2%E6%95%B0%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%AB%E7%95%B0%E3%81%AA%E3%82%8B%E5%80%A4%E3%82%92%E6%B8%A1%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
次のようなものがあるとしましょう。
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までカウントダウンします。