R 递归函数

调用自身的函数称为递归函数,这种技术称为递归。

这种特殊的编程技术可以通过将问题分解为更小、更简单的子问题来解决。

举个例子可以帮助阐明这个概念

我们以计算一个数的阶乘为例。正整数的阶乘定义为从 1 到该数的所有整数的乘积。例如,5 的阶乘(表示为 5!)是

5! = 1*2*3*4*5 = 120

计算 5 的阶乘这个问题可以分解为计算 4 的阶乘乘以 5 的子问题。

5! = 5*4!

或者更普遍地说,

n! = n*(n-1)!

现在我们可以继续下去,直到达到 0!,即 1

下面提供了此的实现。


示例:R 中的递归函数

# Recursive function to find factorial

recursive.factorial <- function(x) {
   if (x == 0)    return (1)
   else           return (x * recursive.factorial(x-1))
}

在这里,我们有一个会调用自身的函数。例如 recursive.factorial(x) 将变为 x * recursive.factorial(x),直到 x 等于 0

x 等于 0 时,我们返回 1,因为 0 的阶乘是 1。这是终止条件,非常重要。

没有这个,递归将不会结束,并且(理论上)会无限进行下去。以下是我们函数的一些示例调用。

> recursive.factorial(0)
[1] 1

> recursive.factorial(5)
[1] 120

> recursive.factorial(7)
[1] 5040

递归的使用通常使代码更短,看起来更整洁。

然而,有时很难跟踪代码逻辑。可能很难以递归的方式思考问题。

递归函数也很占用内存,因为这可能导致大量的嵌套函数调用。在使用它解决大型问题时,必须牢记这一点。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战