具有停止值的序列

Sequence with stopping values

提问人:poole13 提问时间:4/27/2022 最后编辑:poole13 更新时间:5/2/2022 访问量:129

问:

这就像一个常规的特里波那契数列,但是,我希望每当该项处于最小值或最大值时,该序列就会停止。

这就是我开始的

sequence <- function(a1=0, a2=0, a3=1, min=0, max=30) {
  an <- c()
  a[1] <- a1
  a[2] <- a2
  a[3] <- a3
  while(a <= max || a >= min) {
    a[i] <- a[i-1] + a[i-2] + a[i-3]
    an <- c(an, a[i])
  }
  an
} 

关于我的代码设置以及如何修复索引,有什么建议吗?

R 索引

评论

0赞 dcarlson 4/27/2022
您想“每当项等于或超过最小值或最大值时停止”,会消除最小点之后的所有内容,因此除了最小值之前的值之外什么都没有?最大值的意义何在?
0赞 Onyambu 4/27/2022
a 始终大于 min。所以它将永远运行。只需使用条件即可a <=max
0赞 poole13 4/27/2022
@dcarlson @onyambu 最大值和最小值的点是,当序列中的下一项处于该值或高于/低于该值时,序列停止。即,将输出最小值可能很有用,因为用户还可以为起点插入负值。ie 会输出tribonacci(a1=0, a2=0, a3=1, min=0, max=24)0 0 1 1 2 4 7 13 24tribonacci(a1=0, a2=1, a3=-3, min=-30, max=1)0 1 -3 -2 -4 -9 -15 -28
0赞 dcarlson 4/27/2022
我现在明白了。请参阅修订后的答案。

答:

0赞 dcarlson 4/27/2022 #1

这是使用以下方法对此进行编码的方法:abs()

tribonacci <- function(start=c(0, 0, 1), maxval=15) {
    a <- start
    i <- 3
    while(abs(a[i]) <= maxval) {
        i <- i + 1
        a[i] <- a[i-3] + a[i-2] + a[i-1]
    }
    a[1:(i-1)]
}

tribonacci(maxval=24)
# [1]  0  0  1  1  2  4  7 13 24
tribonacci(start=c(0, 1, -3), maxval=30)
# [1]   0   1  -3  -2  -4  -9 -15 -28

由于我们使用绝对值,因此我们只需要一个参数来指定最大值/最小值。