【问题标题】:Difficulty with recursively adding non-whole number递归添加非整数的困难
【发布时间】:2019-11-07 22:24:34
【问题描述】:

我是 R 新手,我在使用简单的递归函数时遇到了困难。我将变量 x 初始化为 .1,然后调用递归函数,如果 x 不等于用户输入的数字,它将向 x 添加 .1 并再次递归调用该函数。如果 x 大于输入数字,则函数返回错误消息。

我尝试将 x 设置为整数,主要是 1,然后尝试评估函数。这个过程有效,所以我认为存在将十进制数相加然后用整数评估它们的相等性的问题。

u<-function(a)
{
  #Initialize r
  x<-.1

  #Call to recursive method
  v(a, x)

}

#Recursive function
v<-function(a, x)
{
  #Check for current value of a and r
  print(a)
  print(x)

  if(a==x) {
    return("Yes")
  }

  else if(a < x) {
    return("Error!")
  }

  else{
    x<-x+.1
    v(a, x)
  }
}

当我将 a 设置为 1 时,我希望函数在递归之后返回“是”,直到 x 也等于 1。然而,这种情况并非如此。然后该函数再次递归,将 x 设置为 1.1 并返回消息“错误!”。

【问题讨论】:

    标签: r recursion binary-operators


    【解决方案1】:

    我认为您遇到了floating point precision 的问题。如果您使用旨在检查相等性同时考虑浮点精度的函数,例如dplyr::near(),则该函数会给出预期的结果:

    v<-function(a, x)
    {
        #Check for current value of a and r
        print(a)
        print(x)
    
        if(dplyr::near(a, x)) {
            return("Yes")
        }
    
        else if(a < x) {
            return("Error!")
        }
    
        else{
            x<-x+.1
            v(a, x)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2018-10-04
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多