r中递归

递归



1.P120薛书

area <- function(f, a, b, eps = 1.0e-06, lim = 10) {
  fun1 <- function(f, a, b, fa, fb, a0, eps, lim, fun) {
    d=(a+b)/2;fd=f(d);h=(b-a)/4;
    a1=h*(fa+fd);a2=h*(fb+fd);
    if(abs(a0-a1-a2)<eps||lim==0)
      return(a1+a2)
    else{
      return(fun(f,a,d,fa,fd,a0,eps,lim-1,fun)+fun(f,d,b,fd,fb,a0,eps,lim-1,fun))
    }
  }
    fa=f(a);fb=f(b);a0 <- ((fa + fb) * (b - a))/2;
   return(fun1(f, a, b, fa, fb, a0, eps, lim, fun1))
}


f <- function(x) 1/x
quad<-area(f,1,5); quad



#一般来说,递归主要包括边界条件、递归前进段和递归返回段。递归调用时
,若边界条件不满足,递归前进;若边界条件满足时,则递归返回。


我这么说你可能还不太明白,我举个栗子
,比如1,2,3,...,n的自然数求和问题。我以f(n)来表示前n项的和,
容易知道f(n)=n+f(n-1),f(n-1)=n-1+f(n-2),...,f(3)=3+f(2),f(2)=2+f(1),f(1)=1。


于是我们可以定义如下递归函数:


mysum <- function(x){
  
  if(x==1){
    
    res = 1  #设置边界条件
    
  } else {
    
    res <- x + mysum(x-1)  # 递归
    
  }
  
  return(res)  # 返回
  
}
mysum(100)

猜你喜欢

转载自blog.csdn.net/piaoyu94/article/details/78927469