递归添加非整数的难度

时间:2019-06-26 03:52:01

标签: r recursion binary-operators

我是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,并返回消息“错误!”。

1 个答案:

答案 0 :(得分:0)

我认为您遇到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)
    }
}