这个python代码有什么问题,为什么它比ruby运行得那么慢?

rap*_*ura 4 ruby python performance fibonacci

我有兴趣比较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    0m11.605s
user    0m11.563s
sys     0m0.013s
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

dco*_*ish 7

python的递归效率是这种开销的原因.有关更多详细信息,请参阅此文章.上面解决这个迭代的解决方案对于python更好,因为它们不会引起函数调用开销递归.我对ruby的假设是,它显然是优化代码而python不是.同样,该文章使用几乎相同的fib函数详细介绍了这一点.