您好,匿名用户
随意问技术百科期待您的加入

递归的算斐波那契数列,为什么用lambda实现会比用def实现效率高?

0 投票

测试代码如下:
python

import time

def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 2) + fibonacci(n - 1)
aaa = time.time()
print fibonacci(35)
print time.time() - aaa

print '--------------------------------'

fib=lambda n:1 if n<=2 else fib(n-1)+fib(n-2)
bbb = time.time()
print fib(35)
print time.time() - bbb

我本机的测试结果如下:

9227465
6.27800011635
--------------------------------
9227465
4.00600004196

def定义函数递归的调用会有开销,那么lambda为什么会快一些呢?

用户头像 提问 2013年 12月15日 @ Kha'Zix 上等兵 (269 威望)
分享到:

1个回答

0 投票
 
最佳答案

因为两个代码不等价:def的条件是 n < 2 ,而lambda的条件是 n <= 2 。

这直接导致了递归展开的时候lambda可以少展开一层,所以速度基本上是2倍的差距。

用户头像 回复 2013年 12月15日 @ Tashigi 列兵 (90 威望)
选中 2013年 9月7日 @Kha'Zix
提一个问题:

相关问题

0 投票
1 回复 21 阅读
用户头像 提问 2014年 3月1日 @ Caster 上等兵 (256 威望)
0 投票
1 回复 26 阅读
0 投票
1 回复 27 阅读
0 投票
0 回复 18 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...