重复功能不会在R中停止

重复功能不会在R中停止,r,R,我对创建一个函数感兴趣,该函数将提供一个Colatz序列的长度。为此,我使用了一个repeat函数来遍历序列。但是,repeat函数似乎并没有停止计算值 什么是Collatz序列 Collatz序列取一个数字(称之为n)并检查它是偶数还是奇数。如果是偶数,那么这个数字被2除(n证明我误读了这个定义。奇数被3n+1而不是n/(3n+1)所取代。其余的都很好。根据修改问题中的定义并改进我们的代码: collatzSeq<-function(n) { N <- n while(n

我对创建一个函数感兴趣,该函数将提供一个Colatz序列的长度。为此,我使用了一个repeat函数来遍历序列。但是,repeat函数似乎并没有停止计算值

什么是Collatz序列


Collatz序列取一个数字(称之为
n
)并检查它是偶数还是奇数。如果是偶数,那么这个数字被2除(
n证明我误读了这个定义。奇数被
3n+1
而不是
n/(3n+1)
所取代。其余的都很好。

根据修改问题中的定义并改进我们的代码:

collatzSeq<-function(n) {
  N <- n
  while(n != 1) {
    n <- if (n %% 2 == 0) n/2 else 3*n + 1
    N <- c(N, n)
  }
  N
}

collatzSeq(20)
## [1] 20 10  5 16  8  4  2  1

collatzseq这个数字永远不等于1。定义的序列是20,10,5,0.3125,…你可以通过在循环中添加
message(tempVar);Sys.sleep(0.5)
来检查。@Roland-Hmm…我现在明白了。同时,我意识到它应该是
3n+1
。谢谢你发现了这一点!
collatzSeq<-function(n) {
  N <- n
  while(n != 1) {
    n <- if (n %% 2 == 0) n/2 else 3*n + 1
    N <- c(N, n)
  }
  N
}

collatzSeq(20)
## [1] 20 10  5 16  8  4  2  1