gpt4 book ai didi

r - 在 R 中结合向量化和递归?

转载 作者:行者123 更新时间:2023-12-04 10:13:48 26 4
gpt4 key购买 nike

我试图在阶乘函数的这个实现中结合向量化和递归:

fac <- function(n) {
ifelse(n == 1, 1, n * fac(n-1))
}

fac(6) #720
fac(c(6,7)) #Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
#Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?

虽然 ifelse 是 if 这不起作用的矢量化版本(参见错误)。

我的问题
1. 为什么不工作?
2. 我怎样才能让它工作?

编辑:我真的没有看到与建议的副本的联系,因为上述函数甚至不适用于两个向量!

最佳答案

让我们看看会发生什么:

fac <- function(n) {
ifelse(n == 1, 1, {message(paste(n-1, collapse = ","));
stopifnot(n > 0); n * fac(n-1)})
}

fac(4:5)
#3,4
#2,3
#1,2
#0,1
#-1,0
# Show Traceback
#
# Rerun with Debug
# Error: n > 0 are not all TRUE

如您所见,条件永远不会 TRUE对于 n 的所有元素因此,递归永远不会停止。

如果 n 的所有元素是平等的,它的工作原理:
fac(c(5,5))
#4,4
#3,3
#2,2
#1,1
#[1] 120 120

只需稍作调整,您的函数就可以处理 n 的不等元素。 , 也:
fac <- function(n) {
ifelse(n <= 1, 1, n * fac(n-1))
}
fac(1:5)
#[1] 1 2 6 24 120

关于r - 在 R 中结合向量化和递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com