首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的RecuRsion -变量未被传递?

R中的RecuRsion -变量未被传递?
EN

Stack Overflow用户
提问于 2014-03-23 19:17:51
回答 3查看 62关注 0票数 0

我试图迭代各种数字,以得到多少“链接”是在“链”的计算。我取一个数字,如果是偶数,做一些事情,如果是奇数,做一些事情,直到它达到1为止。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
> chain(13)
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1
[1] 1    

它应该给我9个步骤,因为整个过程总共有9个步骤。对于这样的递归问题,R中是否有特殊的变量赋值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-23 19:23:02

这并不修改设置为0的chaincount变量,而是在函数中创建一个新的chaincount变量:

代码语言:javascript
运行
复制
chainCount <- chainCount + 1

尝试:

代码语言:javascript
运行
复制
chainCount <<- chainCount + 1
票数 2
EN

Stack Overflow用户

发布于 2014-03-23 19:21:40

你应该小心(小心!)使用"<<-“确保正在更新全局chainCount

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-03-23 19:27:03

如果您确实需要一个计数器,只需将其作为参数传递给函数即可。这避免了全局变量:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22595767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档