If-Else逻辑流程

时间:2013-10-30 17:22:49

标签: if-statement logic pseudocode

任何人都可以向我解释为什么这段代码的分发:

InfectionHistory <- rep(1,100)
for(x in 1:99)
{
  r <- runif(1)
  print(r)
  if(InfectionHistory[x]==1)
  {
    if(r < 0.04)
    {
      InfectionHistory[x+1] <- 2
    }
    else
    {
      InfectionHistory[x+1] <- InfectionHistory[x]
    }
  }
  if(InfectionHistory[x]==2)
  {
    if(r < 0.11)
    {
      InfectionHistory[x+1] <- 1
    }
    else
    {
      InfectionHistory[x+1] <- InfectionHistory[x]
    }
  }
}
plot(InfectionHistory, xlab = "Day", ylab = "State", main = "Patient Status per Day", type = "o")

与此代码不同:

InfectionHistory <- rep(1,100)
for(x in 1:99)
{
  r <- runif(1)
  print(r)
  if((InfectionHistory[x]==1)&&(r < 0.04))
  {
    InfectionHistory[x+1] <- 2
  }
  if((InfectionHistory[x]==2)&&(r < 0.11))
  {
    InfectionHistory[x+1] <- 1 
  }
}
plot(InfectionHistory, xlab = "Day", ylab = "State", main = "Patient Status per Day", type = "o")

我觉得它与if-else语句的逻辑有关。该代码的目标是模拟马尔可夫链的感染模型

1 个答案:

答案 0 :(得分:0)

第一个示例包含嵌套在if else语句中的if对。

第二个示例包含具有复合条件的if语句。

粗略回顾一下,看起来每个例子应该做同样的事情。此代码用作嵌套if语句可以用复合条件重写为if语句的示例。

例如,在示例1中,当我们到达这行代码时:

if(r < 0.04)
{
  InfectionHistory[x+1] <- 2
}

我们已经知道了

InfectionHistory[x]==1

已返回true,否则我们不会在检查此条件的if的正文中。

在第二个例子中,这只是重写为:

if((InfectionHistory[x]==1)&&(r < 0.04))
{
    InfectionHistory[x+1] <- 2
}

编辑:再看一遍,第二个例子似乎没有处理的案例:

else
{
  InfectionHistory[x+1] <- InfectionHistory[x]
}

在第一个例子中重复这段代码。它与两个嵌套的if语句配对。可以使用简单的if else if else结构轻松地重写第二个示例以处理此问题。例如:

if((InfectionHistory[x]==1)&&(r < 0.04))
{
    InfectionHistory[x+1] <- 2
}
else if((InfectionHistory[x]==2)&&(r < 0.11))
{
    InfectionHistory[x+1] <- 1 
}
else
{
    InfectionHistory[x+1] <- InfectionHistory[x]
}