Сложность с рекурсивным добавлением нецелого числа - PullRequest
0 голосов
/ 26 июня 2019

Я новичок в R, и у меня возникли трудности с простой функцией рекурсии.Я инициализирую переменную от x до .1, а затем вызываю рекурсивную функцию, в которой, если x не равно номеру, введенному пользователем, он добавляет .1 к x и рекурсивно вызывает функцию снова.Если 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)
  }
}

Когда я устанавливаю значение 1, я ожидаювозвращать «Да» после повторения до тех пор, пока x не станет равным 1.Однако, это не так.Затем функция повторяется снова, устанавливая x на 1,1 и возвращает сообщение «Ошибка!».

1 Ответ

0 голосов
/ 26 июня 2019

Я думаю, что у вас возникли проблемы с точностью с плавающей запятой . Если вы используете функцию, предназначенную для проверки равенства при учете точности с плавающей запятой, например 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)
    }
}
...