私は自分のプログラミング言語に取り組んでおり、これはbash 4.3+のコードにコンパイルされています。私は自分の言語の最終段階にありますが、再帰関数には小さな問題があります。ここでインデックスを与えられたfibnacci番号を返すとされているbashコードです。Bash 4.3+ - 再帰的フィボナッチ
#!/bin/bash
function fib() {
local a=$1
declare -n ret=$2
if (($a <= 2)); then
ret=1
return
fi
fib $((a-1)) fib1
fib $((a-2)) fib2
ret=$((fib1+fib2))
echo "fib($((a-1))) + fib($((a-2))) = $ret"
return
}
num=5
fib $num result
echo
echo "fib($num) = $result"
このコードの問題は、fib(5)が明らかに間違っている3を与えていることです。私が問題と考えるのは、返り値を格納する方法としてfib1とfib2を渡すと、それらを割り当てる各呼び出しによって上書きされます。それが問題だった場合は、fib1
とfib2
を実行範囲のローカルにするにはどうすればよいですか。
return
ステートメントを使用して値を返すことは望ましくないことに注意してください。declare -n
namerefsを使用して解決策を探してみたいです。
偉大な説明とスマートな回避策、ありがとうございました! – CMPS