Julia循环未终止:斐波那契数列超出阈值问题求助
问题原因分析
你的问题出在循环逻辑的顺序上:当前的while判断的是当前的fib_2是否≤4000000,满足条件后直接计算下一个斐波那契数并推入数组,但这个新生成的next_fib并没有经过判断就被添加,导致最后一次循环时,虽然fib_2=3524578符合条件,但生成的next_fib=5702887已经超过阈值,却依然被加入数组。
修正方案
方案一:推入前判断新生成的数
在push!之前先检查next_fib是否符合要求,只有满足条件才添加到数组:
F = Int[] # 指定数组类型为Int,比Any类型更高效 fib_1 = 0 fib_2 = 1 push!(F, fib_1, fib_2) while fib_2 <= 4000000 next_fib = fib_2 + fib_1 if next_fib <= 4000000 push!(F, next_fib) end fib_1 = fib_2 fib_2 = next_fib end println(F)
方案二:调整循环结构(更简洁)
先将符合条件的数推入数组,再更新斐波那契值,从根源避免超阈值数被添加:
F = Int[] fib_1 = 0 fib_2 = 1 push!(F, fib_1) while fib_2 <= 4000000 push!(F, fib_2) fib_1, fib_2 = fib_2, fib_1 + fib_2 end println(F)
额外优化提示
原代码中F = []会创建Any类型的数组,Julia作为静态类型语言,指定具体类型(比如Int[])能显著提升运行性能,建议养成这个编码习惯。
内容的提问来源于stack exchange,提问作者nandac
相关产品推荐
相关产品推荐

