我在 Julia 中编写了以下代码来输出小于或等于 4000000 的斐波那契数数组:
F = []
fib_1 = 0
fib_2 = 1
push!(F, fib_1, fib_2)
while fib_2 <= 4000000
next_fib = fib_2 + fib_1
push!(F, next_fib)
fib_1 = fib_2
fib_2 = next_fib
end
println(F)
由于某种原因,大于 4000000 的数字也会被推入数组,如下粗体所示:
任意[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657 , 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887]
我的 while 条件似乎有问题,但我看不到什么问题。
我有 Python 背景,对 Julia 很陌生,因此非常感谢任何帮助揭开这一点的帮助。
非常感谢。
计算出新值后
next_fib = fib_2 + fib_1
,立即将其推入数组,而不进行检查。相反,检查 fib_2 <= 4000000
需要在计算和 push!
之间进行。 (顺便说一句,等效的 Python 代码返回完全相同的结果,因此这与语言语义无关。)
您可以将代码更改为:
function fibo(limit = 4000000)
fib_1 = 0
fib_2 = 1
F = [fib_1]
while fib_2 <= limit
push!(F, fib_2)
fib_1, fib_2 = fib_2, fib_1 + fib_2
end
return F
end
println(fibo())