bravebird
下面这段代码是摘自<<R导论>>中文0.1第60页,用递归函数计算一维数值积分
area<-function(f,a,b,eps=1.0e-06,lim=10) #参数eps控制运算精度,lim控制迭代的最大次数
##一维数值积分
{
fun1<-function(f,a,b,fa,fb,a0,eps,lim,fun)
{
d<-(a+b)/2
h<-(b-a)/4
fd<-f(d)
a1<-h*(fa+fd)
a2<-h*(fd+fb)
if(abs(a0-a1-a2)<eps||lim==0)
return(a1+a2)
else
{
return(fun(f,a,d,fa,fd,a1,eps,lim-1,fun)+fun(f,d,b,fd,fb,a2,eps,lim-1,fun)) #递归调用
}
}
fa<-f(a)
fb<-f(b)
a0<-((fa+fb)*(b-a))/2
fun1(f,a,b,fa,fb,a0,eps,lim,fun1)
}
在这段代码中,每递归调用一次,a0的值都会改变,但在fun1函数中并没有任何语句改变a0的值.难道是在"if(abs(a0-a1-a2)<eps||lim==0)"语句中作条件判断时重新执行的" a0<-((fa+fb)*(b-a))/2"语句计算a0的值吗?R中在哪种情况下会重新计逄参数的值,在哪种情况下会直接调用先前的计算结果,而不重新计算?