我正在研究我的编程语言,它可以编译成 bash 4.3+ 代码。我正处于语言的最后阶段,但我对递归函数有一个小问题。这是 bash 代码,它应该返回给定索引的斐波那契数。
#!/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 找到解决方案。
谢谢