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