Julia 代码不会跳出循环

问题描述 投票:0回答:1

我在 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 很陌生,因此非常感谢任何帮助揭开这一点的帮助。

非常感谢。

while-loop julia
1个回答
0
投票

计算出新值后

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())

(如果您希望利用 Julia 的性能优势,那么在函数中编写内容并避免全局作用域是一个非常重要的习惯。)

© www.soinside.com 2019 - 2024. All rights reserved.