ЕСЛИ ЕЩЕ функция в R studio - PullRequest
1 голос
/ 12 января 2020

Может кто-нибудь объяснить, почему этот код приводит к 1 для ввода: exam (5)? ​​

exam<-function(x){
  y<-1
  if(x==1){
    return(1)
  }
  else{
    return(y*exam(x-1))
    y<-y+1
  }
}

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Обычно это не очень хороший вопрос в соответствии с рекомендациями StackOverflow. Но ваша функция только выполняет условие else x-1 раз, а затем, наконец, условие if один раз, так как x==1 истинно, когда x становится 1.

, т. Е. Для exam(5), происходит следующее :

x = 5, y = 1, `else` executed 1 * exam(4)
x = 4, y = 1, `else` executed 1 * 1 * exam(3)
x = 3, y = 1, `else` executed 1 * 1 * 1 * exam(2)
x = 2, y = 1, `else` executed 1 * 1 * 1 * 1 * exam(1)
x = 1, y = 1, `if` executed 1 * 1 * 1 * 1 * 1
  • Это приводит к 1.

Последнее выражение вашего else оператора y<-y+1 никогда не выполняется, потому что вы return(y*exam(x-1)) до него оценивается.

0 голосов
/ 12 января 2020

Я немного изменил ваш скрипт

exam<-function(x){
  y<-1
  if(x==1){
            print("if x===1")
    return(1)

  }
  else{
        print(paste("x = ",x ))
    return(y*exam(x-1))
    y<-y+1
  }
}

теперь вы сможете увидеть результаты каждой рекурсивной итерации

> exam(5)
[1] "x =  5"
[1] "x =  4"
[1] "x =  3"
[1] "x =  2"
[1] "if x===1"
[1] 1

Поскольку вы не объяснили, каких результатов вы ожидаете, трудно помочь тебе дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...