【发布时间】:2015-05-20 15:06:57
【问题描述】:
在 R 中使用递归时,递归环境也很有用。例如,在下面的示例中,下面的代码打印 1 到 9 会很有用。也就是说,每个递归环境中的 x 将比父环境中的 x 大一。有没有一种简单的方法来修改代码,使之成为这种情况?
x = 1
y = function() {
print(x)
x = x + 1
if (x <= 10) y()
}
编辑:更复杂的情况只会涉及更多变量:
w = 1
x = 2
y = 3
z = 4
y = function() {
print(x)
w = w + 1
x = w + x
y = x + y
z = y + z
if (w <= 10) y()
}
现在不是四个变量,而是 50 个变量。这不能通过参数传递很容易地解决。
编辑2:
在编辑 1 中,我希望是这样的:
全局:w = 1,x = 2,y = 3,z = 4
递归 1:w = 2,x = 4,y = 7,z = 11
递归 2:w = 3,x = 7,y = 14,z = 25
等等。请原谅数学错误。
【问题讨论】:
-
也许
y <- function(x = 1) {print(x); if(x < 9) y(x+1) }? -
这行得通,但我希望整个父环境都可用,而不仅仅是在递归之间传递的某些参数。
-
可用是什么意思?
-
不知道这个问题能否解决您的要求:stackoverflow.com/questions/7439110/…
-
在当前示例中,函数
y覆盖了变量y。此外,对全局环境中的变量(例如w = w + 1)的任何更改都只会产生变量的本地副本,但保持原始变量不变。在您的情况下,这意味着该功能将永远不会完成。