【发布时间】:2019-07-14 11:44:31
【问题描述】:
我想编写一个程序,只打印前 10 个大于 1000 的斐波那契数。
我尝试使用 head, n=10L 但没有成功。
len <- 30
fibvals <- numeric(len)
fibvals[1] <- 1
fibvals[2] <- 1
for (i in 3:len) {
fibvals[i] <- fibvals[i-1]+fibvals[i-2]
}
for (i in 1:length(fibvals)){
if(fibvals[i] > 1000){print(head(fibvals[i],n=10L))}
}
我预计前 10 个 fibval 会显示,但它一直显示我的 len = 30(所以多出 4 个)
【问题讨论】:
-
fibvals[i]是一个标量,所以head(fibvals[i],n=10L)等于fibvals[i]。 -
那我怎样才能只显示前 10 个呢?
-
记录到目前为止您已打印的数量,当您打印到 10 个时停止。
-
不知道该怎么做,但我会尝试。谢谢!
-
解决这个问题的几种方法。
sum(fibvals[fibvals > 1000][1:10])。在循环之前启动变量后,将if(fibvals[i] > 1000){fibSum <- fibSum + fibvals[i]; fibIterator <- fibIterator + 1; if(fibIterator = 1) break}添加到第一个循环。 (fibIterator <- 0; fibSum <- 0)。您的解决方案也可以正常工作。sum(head(fibval[fibval > 1000], 10))也可以。