【发布时间】:2014-06-03 13:39:13
【问题描述】:
我正在用 bash 编写脚本。在这个站点 (http://tldp.org/LDP/abs/html/recurnolocvar.html) 中说“即使不使用局部变量,函数也可以递归调用自身”。但没有解释原因。
有一个涉及斐波那契数列的示例函数。他评论代码不需要是本地的,并问为什么,但没有回答。部分如下图:
Fibonacci ()
{
idx=$1 # Doesn't need to be local. Why not?
if [ "$idx" -lt "$MINIDX" ]
then
echo "$idx" # First two terms are 0 1 ... see above.
else
(( --idx )) # j-1
term1=$( Fibonacci $idx ) # Fibo(j-1)
(( --idx )) # j-2
term2=$( Fibonacci $idx ) # Fibo(j-2)
echo $(( term1 + term2 ))
fi
}
斐波那契函数有一个“idx”变量,它可以被连续调用修改,因为连续的“idx”定义没有声明为本地的,因此它应该会影响之前的定义。
该站点上的上一个主题 (http://tldp.org/LDP/abs/html/localvar.html) 表明,如果变量未声明为本地变量(因此默认为全局),那么更改它会反映全局范围的变化。
为什么 bash 函数可以在不使用局部变量的情况下递归调用自身?
【问题讨论】:
-
建议初学者避免使用ABS,因为这样的误导性解释。