首页 > 解决方案 > 递归添加非整数的困难

问题描述

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

标签: rrecursionbinary-operators

解决方案


我认为您遇到了浮点精度问题。如果您使用旨在检查相等性同时考虑浮点精度的函数,例如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)
    }
}

推荐阅读