【问题标题】:Can I define two recursive functions simultaneously in R?我可以在 R 中同时定义两个递归函数吗?
【发布时间】:2020-05-04 10:59:49
【问题描述】:

我必须用已知的 f(1) 和 g(1) 的初始值来函数 f 和 g,并且它们的后续值是通过迭代获得的:f(n+1)=f(n)\cos (g(n))-g(n)\sin(g(n)) 和 g(n+1)=f(n)\cos(g(n))+g(n)\sin(g(n) ))。我一直在尝试在 R 中解决这个问题:

N=100 
for(n in 1:N)
{
 f=function(n)
 g=function(n)
if(n == 1) {
f(1)=0.8
g(1)=0.6} else {
  f(n)=f(n-1)cos(g(n-1))-g(n-1)sin(g(n-1)
   g(n)=f(n-1)cos(g(n-1))+g(n-1)sin(g(n-1))
 }

但是,这不起作用。有什么建议吗?

【问题讨论】:

    标签: r loops for-loop iteration


    【解决方案1】:

    我不确定以下是否回答了这个问题。但是代码中有一些错误:

    1. 函数在for 循环中定义。
    2. 这两个函数都没有被调用过。

    我最好的猜测是

    f <- function(n){
      if(n == 1){
        0.8
      }else{
        f(n-1)*cos(g(n-1))-g(n-1)*sin(g(n-1))
      }
    }
    g <- function(n){
      if(n == 1) {
        0.6
      } else {
        f(n-1)*cos(g(n-1))+g(n-1)*sin(g(n-1))
      }
    }
    
    N <- 10
    y <- numeric(N)
    for(n in 1:N) {
      y[n] <- f(n)
      cat(y[n], "\n")
    }
    y
    

    【讨论】:

    • 确实有效,谢谢!该规范的问题在于,对于高 N 值,它相对较慢。
    • @WeierstraßRamirez 是的,所以我注意到了。函数调用的数量呈指数增长,并且它们不断重复已经计算过的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2015-12-30
    • 2020-12-23
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多