【发布时间】:2021-07-24 02:29:52
【问题描述】:
使用此函数,您可以使用递归函数计算斐波那契数列,但我不确定为什么会这样,我标记了我挣扎的位置,有人可以解释一下这段代码吗?
fib <- function(n){
if (n == 0) return(0)
if (n == 1) return(1)
seq <- integer(n) # at this point i didnt understand much at all
seq[1:2] <- 1
calc <- function(n) {
if (seq[n] != 0) return(seq[n])
seq[n] <<- calc(n-1) + calc(n-2)
seq[n]
}
calc(n)
}
【问题讨论】:
-
我的建议是设置
n的值,然后逐行运行函数中的代码行,以便了解每个命令的作用。这将帮助您破译正在发生的事情,而不是一次运行整个函数。 -
为了回答您的具体问题,
integer(n)创建一个长度为n的整数向量,其中全是零。 -
下面的代码呢?例如为什么必须包含“if (seq[n] != 0) return(seq[n])”?
-
我想通过保存之前的结果来让递归函数更快,没想到这样会不好……
-
现在我明白了,我认为这不是一个坏问题,但很难理解代码的目标。如果您已经更详细地布置了一些事情(例如“这是 R 中斐波那契的基本递归实现......现在我想通过保存以前的版本来加快速度......”)。但是仅仅展示代码并说“我不明白为什么会这样”并不会得到很好的接受(如您所见)。 (如果你不理解代码,它最初是从哪里来的......?)
标签: r recursion fibonacci memoization