【发布时间】:2021-05-15 17:11:47
【问题描述】:
嘿,我正在尝试将我的 python 代码转换为 R,但似乎无法弄清楚递归的最后一部分。如果有两种语言经验的人可以提供帮助,那就太好了!
def robber(nums):
if len(nums) == 0: return 0
elif len(nums) <= 2: return max(nums)
else:
A = [nums[0], max(nums[0:2])]
for i in range(2, len(nums)):
A.append(max(A[i-1], A[i-2] + nums[i]))
return A[-1]
以上是 Python 版本,以下是我目前尝试转换为 R
robbing <- function(nums) {
if (length(nums) == 0){
result <- 0
}
else if(length(nums) <= 2){
result <- max(nums)
}
else{
a <- list(nums[0], max(nums(0:2)))
for (i in range(2, length(nums))){
result <- max(a[i-1], a[i-2] + nums[i])
}
}
#result <- a[-1]
}
【问题讨论】:
-
从您的代码中我可以看出,您剩下的问题是如何引用
A的最后一个元素。这应该是一个微不足道的查找。同样,重新配置逻辑以便仅在前面的子句失败时分配该值,是一个简单的else if / else添加。我错过了什么问题? -
nums(0:2)应该是nums[0:2]的子集,而不是尝试调用名为nums的函数。此外,R 是 1-indexed 并且具有包容性端点,因此您可能需要检查nums[0:2]不是nums[1:2](也许?)。我怀疑a <- list(...也应该是a <- c(...。您的函数目前也不返回任何内容。您需要添加类似于 python 的return(...)语句,尽管如果您只输入例如 R 隐式返回一个对象。max(nums)作为最后一行,没有分配<-。 -
能否分享
dput(nums)来测试功能?
标签: python r converters