【问题标题】:How to best save/store the results from intermediate calls to a recursive function?如何最好地保存/存储从中间调用到递归函数的结果?
【发布时间】:2021-10-18 19:38:23
【问题描述】:

我有一个递归调用自身的函数:

myfunc <- function(id) {
  
  new_id <- id - 1
  
  print(id)
  
  if(new_id > 0) {
    myfunc(new_id)
  }
  return(0)
}

如果我用 2 调用它,我们得到

> myfunc(2)

[1] 2
[1] 1
[1] 0

正如预期的那样,但实际上我想以某种方式保存打印的中间值并在最后将它们作为向量返回:

[1] 2 1 0

我试过这个:

v_id <- NULL

myfunc <- function(id) {
  
  new_id <- id - 1
    
  if(new_id > 0) {
    v_id <- c(v_id, id)
    myfunc(new_id)
  } else {
    return(v_id)
  }
}

但它只返回 null。

我觉得这可以使用环境来解决,但我完全不知道该怎么做。

如何保存递归函数调用的中间结果,并在最后返回它们?或者是否有更好的方法来实现我想要的?

谢谢

【问题讨论】:

  • 那么你真的需要递归函数吗?你只想反转输出吗?
  • @user2974951 我需要一个递归函数。实际用例更复杂,这只是一个 mwe。

标签: r


【解决方案1】:

你可以试试这个-

myfunc <- function(id) {
  new_id <- id - 1
  print(id)
  
  if(new_id == 0) {
    return(c(id, new_id))
  } else return(c(id, myfunc(new_id)))
}

x <- myfunc(2)
#[1] 2
#[1] 1
x
#[1] 2 1 0

x <- myfunc(5)
#[1] 5
#[1] 4
#[1] 3
#[1] 2
#[1] 1
x
#[1] 5 4 3 2 1 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 2018-08-17
    • 2021-03-18
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多