阶乘从头开始在RStudio中生成多个输出

阶乘从头开始在RStudio中生成多个输出,r,R,我知道有一个内置的函数,但我在读一个编码网站的时候,把从零开始做阶乘作为一个想法,这让我很困惑。代码如下: recursion <- function(n) { if(n <= 1) { print(1) } else { print(n * recursion(n-1)) } } 但我有30%的时间: > recursion(5) [1] 120 有人能帮我理解为什么会这样,我能做什么才能只得到一个输出 不确定这是否被允许,但我在尝试实现备

我知道有一个内置的函数,但我在读一个编码网站的时候,把从零开始做阶乘作为一个想法,这让我很困惑。代码如下:

recursion <- function(n) {

  if(n <= 1) {
    print(1)
  } else { 
    print(n * recursion(n-1))
  }
}
但我有30%的时间:

> recursion(5)
[1] 120
有人能帮我理解为什么会这样,我能做什么才能只得到一个输出

不确定这是否被允许,但我在尝试实现备忘录时也遇到了同样的问题

memoization <- function(){
  values <- 1
  Factorial_mem <- function(x){
    if(x < 0){
      stop("Factorials can only be computed when x is equal to, or greater 
        than, zero")
    }
    if (x == 0 | x == 1){
      return(1)
    } 
    if (length(values) < x){
      values <<- `length<-`(values, x)
    }
    if (!is.na(values[x])){
      return(values[x])
    }
    values[x] <<- x * factorial(x-1)
    print(values)

  }
  Factorial_mem
}
大部分时间的输出:

> Factorial_mem(5)
[1] 120
> Factorial_mem(5)
[1] 1 NA NA NA 120
如果我需要提供额外的信息澄清,请让我知道,我可以提供它。我不确定我使用RStudio的事实是否相关


谢谢你

你正在为循环调用你的函数
,但是你在第一个例子中使用了
递归。那么是循环的
还是递归的
呢?对不起。。这是递归。已修复。您的
打印(x)
应该位于
for(i in 1:n)
中。我无法使用
复制(1000,递归(5))
复制您的问题。您需要提供更多关于70-30%拆分的上下文。谢谢CPak。我能提供的唯一其他信息是,我正在从一个脚本同时运行for_循环、reduce、递归和memonization函数。我想知道这是否就是输出产生异常的原因?
> Factorial_mem(5)
[1] 1 NA NA NA 120