我试图迭代各种数字,以得到多少“链接”是在“链”的计算。我取一个数字,如果是偶数,做一些事情,如果是奇数,做一些事情,直到它达到1为止。
chainCount <- 0
chain <- function( n ){
if(n %% 2 == 0 && n > 1){
n <- n/2
chainCount <- chainCount + 1
print(chainCount)
chain( n )
}
else if (n > 1){
n <- 3*n + 1
chainCount <- chainCount + 1
print(chainCount)
chain( n )
}
}
chain(13)
该函数执行13 chainCount 40→20→10→5→16→8→4→2→1。
> chain(13)
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
它应该给我9个步骤,因为整个过程总共有9个步骤。对于这样的递归问题,R中是否有特殊的变量赋值?
发布于 2014-03-23 19:23:02
这并不修改设置为0的chaincount
变量,而是在函数中创建一个新的chaincount
变量:
chainCount <- chainCount + 1
尝试:
chainCount <<- chainCount + 1
发布于 2014-03-23 19:21:40
你应该小心(小心!)使用"<<-
“确保正在更新全局chainCount
chainCount <- 0
chain <- function( n ){
if(n %% 2 == 0 && n > 1){
n <- n/2
chainCount <<- chainCount + 1
print(chainCount)
chain( n )
}
else if (n > 1){
n <- 3*n + 1
chainCount <<- chainCount + 1
print(chainCount)
chain( n )
}
}
chain(13)
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
发布于 2014-03-23 19:27:03
如果您确实需要一个计数器,只需将其作为参数传递给函数即可。这避免了全局变量:
chain <- function( n, chainCount ){
if(n %% 2 == 0 && n > 1){
n <- n/2
chainCount <- chainCount + 1
print(chainCount)
chain( n, chainCount )
}
else if (n > 1){
n <- 3*n + 1
chainCount <- chainCount + 1
print(chainCount)
chain( n, chainCount )
}
}
chain(13, 0)
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
https://stackoverflow.com/questions/22595767
复制相似问题