鱼C论坛

 找回密码
 立即注册
查看: 2953|回复: 9

递归效率好低啊。如何提高它的效率呢?

[复制链接]
发表于 2014-9-6 10:06:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. list1 = []
  2. list2 = []
  3. num1 = 1
  4. def numlist(num):
  5.     if num == 1 or num ==2:
  6.         return (1)
  7.     else:
  8.         return (numlist(num-1)+numlist(num-2))

  9. while num1 < 40:
  10.     num1 +=1
  11.     list1.append(numlist(num1))
  12. for i in list1:
  13.     if i % 2 == 0:
  14.         list2.append(i)
  15. print(sum(list2))
复制代码




当把 num1变成40就跑不动了。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-6 11:06:55 | 显示全部楼层
本帖最后由 bevin 于 2014-9-6 11:09 编辑
  1. list1 = [0,1,1]
  2. list2 = []
  3. ct = 3
  4. def numlist(num):
  5.     #global list1
  6.     res = list1[num-1] + list1[num-2]
  7.     list1.append(res)
  8.     return res

  9. while ct < 40:
  10.     numlist(ct)
  11.     ct += 1

  12. list2 = filter(lambda x: x%2 == 0,list1[1:])
  13. print sum(list2)

  14. #print sum(filter(lambda x: x%2 == 0,list1[1:]))
复制代码
这是2.x的运行代码,做了一些改进(filter,lambda函数的使用,列表解析等)
这里可以直接取list1之前计算的结果。或者使用for语句来计算。。。能不使用递归就尽量不要用递归哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-6 11:14:19 | 显示全部楼层
  1. def numlist(num):
  2.     tlist = [1,1]
  3.     for i in range(2,num):
  4.         tlist.append(tlist[i-1]+tlist[i-2])
  5.     return tlist[-1]

  6. print [numlist(x) for x in range(1,40)]
复制代码


这是for语句的实现,要比上面慢点,但是比递归快多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 12:09:04 | 显示全部楼层
bevin 发表于 2014-9-6 11:14
这是for语句的实现,要比上面慢点,但是比递归快多了

嗯。我开始输入的4000,跑了很长时间没有结果,我又换成400,还是没结果,换成40,跑了好久才有的结果。。递归效率真的太差了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-9 10:13:23 | 显示全部楼层
学习~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-9 10:50:07 | 显示全部楼层
学习了~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-10 19:45:58 | 显示全部楼层
  来学习的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-11 11:41:32 | 显示全部楼层
  来学习啦,多多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-12 15:06:10 | 显示全部楼层
不知道Python支持尾递归优化不,一般的线性递归或树形递归效率都是很低的。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 15:28:00 | 显示全部楼层
川本姨夫 发表于 2014-9-12 15:06
不知道Python支持尾递归优化不,一般的线性递归或树形递归效率都是很低的。

请教一下什么叫尾递归优化。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表