对于作业问题,我有以下代码:
有人可以解释一下代码中发生了什么,为什么会产生22?
k <- 1
for (i in 1:3){
k <- k + 1
for (j in 1:2){
k = k * j
}
}
答案 0 :(得分:2)
这是简单的方法来理解循环任何编程语言是如何工作的跟进,一步一步它在做什么。
的下面一个简单的例子中如何纸可以在“调试”。将来可能会有用。
下表代表你的循环的每一次迭代和各操作的值。
您应该以这种方式阅读:
和重复,直到i为3。
答案 1 :(得分:2)
让我们逐行调试代码: 第一:
k <- 1 // K = 1
for (i in 1:3){ // all the content of this loop will be repeated 3 times because i is between 1 and 3 ( 1,2,3 ) = ( i=1, i=2 and i=3)
//First time with: i=1
k <- k+1 // K = 1 + 1 = 2
for (j in 1:2){ // all the content of this loop will be repeated 2 times ( with : j=1 and j=2)
//First time with j=1:
k <- k*j // k = 2*1 = 2
//Second time with j=2:
k <- k*j // k=2*2 = 4
}
}
//Second time with: i=2
k <- k+1 // K = 4 + 1 = 5
for (j in 1:2){ // all the content of this loop will be repeated 2 times ( with : j=1 and j=2)
//First time with j=1:
k <- k*j // k = 5*1
//Second time with j=2:
k <- k*j // k=5*2 = 10
}
}
//Third time with: i=3 - the last one because i is between 1 and 3 ( 1,2,3 )
k <- k+1 // K = 10 + 1 = 11
for (j in 1:2){ // all the content of this loop will be repeated 2 times ( with : j=1 and j=2)
//First time with j=1:
k <- k*j // k = 11*1
//Second time with j=2:
k <- k*j // k=11*2 = 22
}
}
使用“ for”背后的想法是,您希望根据条件在循环内重复执行多次代码,让我们举一个简单的例子: 我想打印十个“你好”:
for ( i in 1:10 ){
print "hello";
}
如果我修改代码,让事情变得有些复杂:
for ( i in 1:10 ){
print "hello";
i <- 11;
}
此代码的输出将仅为1个“ Hello”,因为“ i” = 11和11不在1到10之间-对于i在1:10中-
答案 2 :(得分:0)
将print
语句添加到循环中。这是一种可以调试的好方法,也是查看正在发生的事情的极好方法。如果您运行此程序,我认为它将帮助您理解。
k <- 1
for (i in 1:3){
print(sprintf("Outer loop: i = %s, k = %s", i, k))
k <- k + 1
print(sprintf("Added one, now k = %s", k))
for (j in 1:2){
print(sprintf(" Inner loop: j = %s, k = %s", j, k))
k = k * j
print(sprintf(" Multiplied, now k = %s", k))
}
}
这将打印:
[1] "Outer loop: i = 1, k = 1"
[1] "Added one, now k = 2"
[1] " Inner loop: j = 1, k = 2"
[1] " Multiplied, now k = 2"
[1] " Inner loop: j = 2, k = 2"
[1] " Multiplied, now k = 4"
[1] "Outer loop: i = 2, k = 4"
[1] "Added one, now k = 5"
[1] " Inner loop: j = 1, k = 5"
[1] " Multiplied, now k = 5"
[1] " Inner loop: j = 2, k = 5"
[1] " Multiplied, now k = 10"
[1] "Outer loop: i = 3, k = 10"
[1] "Added one, now k = 11"
[1] " Inner loop: j = 1, k = 11"
[1] " Multiplied, now k = 11"
[1] " Inner loop: j = 2, k = 11"
[1] " Multiplied, now k = 22"
这非常彻底-第一次不错。将来,您可以使用更简单的print
语句来节省时间。
这也强调了 inner (j
)循环的作用是乘以1
,然后乘以2
。内部循环的最终结果是将k
乘以2,因此我们可以通过一个循环来完成所有相同的(有意义的)操作:
k <- 1
for (i in 1:3){
k <- k + 1
k <- k * 2 ## equivalent to inner loop
}
答案 3 :(得分:0)
一开始,您有一个名为k的变量,其值为1。 k = 1
要获得22的结果,第一个for循环应在4而不是3处结束。由于我不确定编程语言之间是否存在差异,可能是我错了。
第一个for循环将k从1迭代到4,并将其添加到变量“ k”中。
第二个将新的k乘以1,然后再乘以2。
我希望以下代码能帮助您理解它。
k=1
1. For-loop (1:4)
k = 1 + 1 // k = 2
k = 2 + 2 // k = 4
k = 4 + 3 // k = 7
k = 7 + 4 // k = 11
k=11
2. For-loop (1:2)
k = k * 1 // k = 11
k = k * 2 // k = 22
k = 22