我正在編寫我的編程語言,編譯成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