我正在编写我的编程语言,编译成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