r - 递归添加非整数的困难
问题描述
我是 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 并返回消息“错误!”。
解决方案
我认为您遇到了浮点精度问题。如果您使用旨在检查相等性同时考虑浮点精度的函数,例如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)
}
}
推荐阅读
- android - Android Studio 错误膨胀约束布局
- python - 无法打开来自十六进制字符串的解密图像
- javascript - vuejs - 绑定到组件数据
- python - Keras model.fit ValueError:输入数组应具有与目标数组相同数量的样本
- php - PHP:将小浮点数转换为科学计数法(E)
- powershell - 在批处理文件的 for /f 循环中捕获 PowerShell 命令的输出
- java - 使用从文本文件读取的合并排序对 100000 个整数进行反转计数。但无法获得正确的反转计数
- c# - c# 测试潜在对象列表是否包含字符串
- python - 在 python 代码中未设置 Database_url
- javascript - 如何通过在其区域外单击来隐藏当前内容,以及当我在 IE11 中显示其他内容时?