【问题标题】:is it possible to use vector index in while function?是否可以在 while 函数中使用向量索引?
【发布时间】:2022-01-03 04:57:01
【问题描述】:

所以我正在尝试创建一个斐波那契数列,我发现以下语法有效

x <- 0
y <- 1
fib <- c()

while (x < 4000000 & y < 4000000){
  x <- x + y
  y <- x + y
  fib <- c(fib, x, y)
}

但是,只要在计算中使用的 x 和 y 的值不超过 4,000,000,此语法只会创建向量。是否可以让 while 引用“如果向量 fib 的元素少于 100 个元素”?

提前致谢

【问题讨论】:

    标签: r indexing syntax fibonacci


    【解决方案1】:

    对您的代码进行非常细微的更改,在 while 循环的每次迭代之前使用 length() 函数检查 fib 的长度(元素数量)。

    while(length(fib)<100){....}
    

    这样可以避免创建另一个变量来计算迭代次数,就像其他答案一样。

    对于它的价值,这就是我的做法 - 因为你有一定数量的迭代,所以 for 循环更合适

    n <- 100
    fib <- c(0,1)
    
    for(i in 3:n){
      fib[i] <- fib[i-2] + fib[i-1]
    }
    

    【讨论】:

      【解决方案2】:

      这是另一种编写代码的方式-

      fib <- numeric(100)
      fib[1] <- 0
      fib[2] <- 1
      i <- 2
      while (i < 100){
        i = i + 1
        fib[i] = fib[i-1] + fib[i-2]
      }
      

      在循环中增长向量 (fib = c(fib, x, y)) 效率低下,因此我创建了一个固定长度 (100) 的向量,然后将值分配给它。这也避免了创建不必要的临时变量x 和y。

      【讨论】:

        【解决方案3】:

        只需在while 循环内定义另一个变量,并将其增加fib的长度,

        x <- 0
        y <- 1
        mylen <- 0 # new variable 
        
        fib <- c()
        
        while (mylen<100){
        
          x <- x + y
        
          y <- x + y
        
          fib = c(fib, x, y)
        
          mylen <- length(fib)
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-10
          • 1970-01-01
          • 2010-09-08
          • 2012-05-22
          • 2021-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多