R语言 递归函数

R语言 递归函数

递归,用最简单的话说,是一种循环技术。它利用了R语言中函数的基本工作原理。递归是指函数调用自己。这就形成了一个循环,每次函数被调用时,它就一次又一次地调用自己,这种技术被称为递归。由于循环会增加内存,所以我们使用递归。递归函数使用递归的概念来执行迭代任务,它们一次又一次地调用自己,这就像一个循环。这类函数需要一个停止条件,以便它们能够连续停止循环。

递归函数调用自己。它们将问题分解成更小的组成部分。函数()在原函数()内对每个较小的组件进行自我调用。在这之后,结果将被放在一起,以解决原来的问题。

例子:在R中使用递归的阶乘

rec_fac <- function(x){
    if(x==0 || x==1)
    {
        return(1)
    }   
    else
    {
        return(x*rec_fac(x-1))
    }
}

输出

[1] 120

这里,rec_fac(5)调用rec_fac(4),然后调用rec_fac(3),依次类推,直到输入参数x,达到1,函数返回1并被销毁。返回值与参数值相乘后返回。这个过程一直持续到第一个函数调用返回其输出,给我们带来最终的结果。

例子。使用递归的数列之和
R中的递归对于寻找自我重复的数列之和最为有用。在这个例子中,我们将找出一个给定的数列的平方之和。

总和 = 12 +22 +…+N2

例子

sum_series <- function(vec){
    if(length(vec)<=1)
    {
        return(vec^2)
    }
    else
    {
        return(vec[1]^2+sum_series(vec[-1]))
    }
}
series <- c(1:10)
sum_series(series)

输出

[1] 385

R递归的主要特点

  • 递归的使用,往往使代码更短,而且看起来很干净。
  • 它是少数情况下的一个简单解决方案。
  • 它在一个函数中表达了对自身的调用。

递归在R中的应用

  • 递归函数被用于许多高效的编程技术中,如动态编程语言(DSL)或分割与征服算法。
  • 在动态编程中,无论是自上而下还是自下而上的方法,递归都对性能至关重要。
  • 在划分和征服算法中,我们将一个问题划分为更小的子问题,更容易解决。然后再把输出的结果回升到顶层。递归有一个类似的过程,这就是为什么它被用来实现这种算法。
  • 就其本质而言,递归是将一个问题分解成许多更小的问题,这些更小的问题被进一步分解,直到剩下的问题是微不足道的。然后,解决方案又被一块一块地建立起来。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程