我是 Julia 的新手,正在尝试实现/重写我以前的一些 Python 代码作为练习。我正在使用 Project Euler problem 25 作为练习
在 Python 中我有
def fibonacci(N):
"""Returns the Nth Fibonacci Number"""
F = [0, 1]
i = 0
while i <= N-2:
F_new = F[i] + F[i+1]
F.append(F_new)
i += 1
return F[N]
N = 0
x = 1000
while len(str(fibonacci(N))) <= x:
if len(str(fibonacci(N))) == x:
print(N)
break
N = N + 1
它运行并在大约 6.5 秒内给出正确答案。在下面的 Julia 中尝试这样做时
function fib(N)
F = [0, 1]
global i = 1
while i <= N-2
F_new = F[i] + F[i+1]
append!(F, F_new)
global i += 1
end
return F[N]
end
N = 1
x = 1000
while length(string(fib(N))) <= x
if length(string(fib(N))) == x
print(N-1)
break
end
global N += 1
end
代码似乎“永远”运行。然而,在 Julia 代码中,只有当 x<= 20 时,代码才会完成并产生正确的答案。在 Julia 代码中,当 x>20 时程序永远不会结束。
如果它针对低于 21 的所有值运行,我不确定哪里会出错?有人可以解释错误发生的位置和原因吗?
最佳答案
默认情况下,Python 整数的大小是无限的,并且会根据需要增长。另一方面,如果在 64 位系统上,Julia 将默认为带符号的 64 位整数。 (参见 docs)当尝试计算超过 19 位长的值时,这开始溢出,因此这从 x=20
开始。为了在 Julia 中获得相同的行为,您应该对任何超过此大小的值或参数使用 BigInt
类型。
关于python - Julia 代码没有完成而 Python 代码完成了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73675397/