如何在R中编写仅以n为输入的拉马努金嵌套根式计算函数
R语言实现拉马努金嵌套根式计算函数
拉马努金嵌套根式的展开形式为:$\sqrt{1 + 2\sqrt{1 + 3\sqrt{1 + ... + n\sqrt{1}}}},当n趋近于无穷大时,该式的极限值为3。
实现思路
- 优先采用从最内层往外层迭代计算的逻辑,避免递归深度过大导致的栈溢出问题,计算效率更高
- 初始值设为最内层的计算结果1,从k从n倒序遍历到2,逐层向外计算即可得到n层嵌套的结果
代码实现
ramanujan_nested_root <- function(n) { # 输入参数合法性校验 if (!is.numeric(n) || n < 2 || length(n) != 1 || round(n) != n) { stop("输入参数n必须为大于等于2的正整数") } res <- 1 # 从内向外迭代计算 for (k in n:2) { res <- sqrt(1 + k * res) } return(res) }
使用示例
# 计算嵌套到第5层的结果 ramanujan_nested_root(5) # 计算嵌套到第50层的结果,已经非常接近理论极限3 ramanujan_nested_root(50)
注意事项
n取值越大,计算结果精度越高,当n≥30时计算结果和极限值3的误差已经小于1e-6,可满足绝大多数场景的精度需求。
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

