有人可以解释为什么下面这些简单的代码(Euclid算法的实现找到最大的共同点)比Ruby中的等效代码慢3倍?
iter_gcd.py的内容:
from sys import argv,stderr
def gcd(m, n):
if n > m:
m, n = n, m
while n != 0:
rem = m % n
m = n
n = rem
return m
# in Python3 code there is xrange replaced with range function
def main(a1, a2):
comp = 0
for j in xrange(a1, 1, -1):
for i in xrange(1, a2):
comp += gcd(i,j)
print(comp)
if __name__ == '__main__':
if len(argv) != 3:
stderr.write('usage: {0:s} num1 num2\n'.format(argv[0]))
exit(1) …Run Code Online (Sandbox Code Playgroud) 我有兴趣比较ruby speed和python,所以我采用了最简单的递归计算,即打印fibonacci sequance.
这是python代码
#!/usr/bin/python2.7
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1)+fib(n-2)
i = 0
while i < 35:
print fib(i)
i = i + 1
Run Code Online (Sandbox Code Playgroud)
这是红宝石代码
#!/usr/bin/ruby
def fib(n)
if n == 0
return 0
elsif n == 1
return 1
else
fib(n-1)+fib(n-2)
end
end
i = 0
while (i < 35)
puts fib(i)
i = i + 1
end
Run Code Online (Sandbox Code Playgroud)
在几次运行中,时间报告此平均值
real 0m4.782s
user 0m4.763s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)
多数民众赞成红宝石,现在python2.7给出
real …Run Code Online (Sandbox Code Playgroud)