R:收集递归函数的中间输出

时间:2016-07-19 10:36:11

标签: r recursion tail-recursion

我有一个递归函数,它使用前一个调用的输出作为下一个调用的输入:

recurse_foo = function(input) {
  if(identical(input, character(0))) return(NULL)
  else {
    uu = get_incremental_output(input)  ## <-- interested in collecting this
    return(recurse_foo(uu))
  }
}

很明显,终端输出不是很有趣,我有兴趣收集中间输出,但我无法想象增长全局列表或任何其他副作用将是优雅的(这是我唯一能做的事情想到)。

这里可能有用的任何其他抽象?

感谢。

具体示例:

final_countdown = function(input) {
  if (input/2 < 1) return(NULL)
  else {
    uu = input/2         # <-- interested in collecting this
    print(uu)
    return(final_countdown(uu))
  }
}

final_countdown(100)

在这种情况下,我有兴趣收集uu编辑print的序列。

1 个答案:

答案 0 :(得分:1)

如果所有中间输出的类型相同,则这是一个解决方案:

final_countdown = function(input) {
  if (input/2 < 1) return(NA)
  else {
    c(input, final_countdown(input/2))
  }
}