我试图定义以下函数,但失败了。欢迎任何建议。
H = list()
H[[1]] = function(x) 1
for(i in 2:4) H[[i]] = function(x) H[[i-1]](x)*x+1
> H
[[1]]
function (x)
1
[[2]]
function (x)
H[[i - 1]](x) * x + 1
[[3]]
function (x)
H[[i - 1]](x) * x + 1
[[4]]
function (x)
H[[i - 1]](x) * x + 1
> H[[1]](1)
1
> H[[2]](1)
Too Deep Nesting
与其递归定义一组函数,不如定义单个递归函数:
H <- function(x, n) {
if (n == 1) 1 else H(x, n-1) * x + 1
}
然后,H(x, n)
返回与您的H[[n]](x)
相同的内容。
为了完整起见:使用 for 循环的方法不起作用,因为每个函数都依赖于在生成函数时分配给i
的特定值。 在循环结束时,i
设置为4
。调用H[[2]](10)
时,R 会尝试计算以无限递归结束的H[[i-1]](10) * 10 + 1 = H[[3]](10) * 3 + 1 = ...
。 简单地说,R 不记得在 H[[2]] 被定义为等于 2i
的那一刻。