R语言中使用While函数实现斐波那契数列的问题求助
用While循环生成≤4000000的斐波那契数列并计算偶数项之和
我来帮你搞定这个问题!你目前用固定长度的for循环生成斐波那契数列的方式,没法自动停在≤4000000的项上——这刚好是while循环的强项,它能根据动态条件控制循环的停止时机,完全适配你不确定迭代次数的场景。
问题分析
你原代码里固定了生成34项,但第34项斐波那契数是5702887,已经超过了4000000的上限,导致结果里混入了不符合要求的项。而while循环可以让我们在每一步判断下一项是否符合条件,符合就继续,不符合就停止。
完整解决方案代码
# 初始化前两项斐波那契数 a <- 1 b <- 1 fib_sequence <- c(a, b) # 使用while循环生成所有≤4000000的斐波那契数 while (TRUE) { next_fib <- a + b # 如果下一项超过上限,直接跳出循环 if (next_fib > 4000000) { break } # 将符合条件的项加入数列 fib_sequence <- c(fib_sequence, next_fib) # 更新前两项,为下一次计算做准备 a <- b b <- next_fib } # 筛选数列中的偶数项 even_fibs <- fib_sequence[fib_sequence %% 2 == 0] # 计算偶数项的总和 total_sum <- sum(even_fibs) # 输出结果 cat("符合条件的斐波那契数列:", fib_sequence, "\n") cat("其中偶数项的和:", total_sum, "\n")
代码解释
- 初始化变量:先定义前两项斐波那契数
a和b,并把它们存入结果向量fib_sequence。 - While循环逻辑:
- 每次计算下一项
next_fib = a + b - 判断如果
next_fib超过4000000,就用break跳出循环 - 如果符合条件,就把它加入结果向量,然后更新
a和b的值(让a变成原来的b,b变成刚计算的next_fib)
- 每次计算下一项
- 筛选与求和:用取模运算
%% 2 == 0筛选出偶数项,再用sum()计算它们的总和。
这样生成的数列只会包含≤4000000的项,完全符合你的需求,而且完美利用了while循环的条件驱动特性。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

