免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2873 | 回复: 3
打印 上一主题 下一主题

为什么我这个递归的binary search 会recursion depth exceeded [复制链接]

论坛徽章:
13
CU大牛徽章
日期:2013-03-14 14:14:082016科比退役纪念章
日期:2016-07-22 11:15:35数据库技术版块每日发帖之星
日期:2016-05-27 06:20:002015亚冠之吉达阿赫利
日期:2015-08-05 10:06:542015年亚洲杯之韩国
日期:2015-04-01 16:05:42双鱼座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大牛徽章
日期:2013-03-14 14:14:29CU大牛徽章
日期:2013-03-14 14:14:26
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-29 17:01 |只看该作者 |倒序浏览
  1. #binary search recursive
  2. def binary_search_rec(seq,key,low=0,high=None):
  3.     low=0
  4.     high=len(seq)-1
  5.     mid=(high+low)//2
  6.     if not seq or low > high:
  7.         return False
  8.     if seq[mid]==key:
  9.         return mid
  10.     if key < seq[mid]:
  11.         return binary_search_rec(seq,key,low,mid)
  12.     else:
  13.         return binary_search_rec(seq,key,mid,high)

  14. #binary search iterative
  15. def binary_search_iter(seq,key):
  16.     hi,lo=len(seq)-1,0
  17.     while lo < hi:
  18.         mid=(hi+lo)//2
  19.         if key==seq[mid]:
  20.             return mid
  21.         elif key < seq[mid]:
  22.             hi=mid
  23.         else:
  24.             lo=mid+1
  25.     return False

  26. import bisect
  27. def test_binary_search2():
  28.     seq=[1,2,5,6,7,10,12,12,14,15]
  29.     key=6
  30.     print(binary_search_iter(seq,key))
  31.     print(binary_search_rec(seq,key))
复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
2 [报告]
发表于 2016-03-30 00:55 |只看该作者
回复 1# hmchzb19
  1. #!/usr/bin/ruby -w

  2. def bisere seq, key, low, high
  3.     # if reset low = 0. high = size - 1
  4.     # no way: low > high
  5.    
  6.     return nil if low > high
  7.     mid = ( high + low ) / 2
  8.     if seq[mid] == key
  9.         mid
  10.     elsif key < seq[mid]
  11.         bisere seq, key, low, mid - 1   # here: mid - 1
  12.     else
  13.         bisere seq, key, mid + 1, high  # here: mid + 1
  14.     end
  15. end

  16. seq = [ 1, 2, 5, 6, 7, 10, 12, 12, 14, 15 ]
  17. key = 6
  18. ret = bisere seq, key, 0, seq.size - 1  # here: low, high
  19. puts ret
  20. __END__
复制代码

论坛徽章:
11
2015年迎新春徽章
日期:2015-03-04 09:55:282017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之辽宁
日期:2016-12-15 10:24:1715-16赛季CBA联赛之佛山
日期:2016-11-30 09:04:2015-16赛季CBA联赛之江苏
日期:2016-04-29 15:56:1215-16赛季CBA联赛之同曦
日期:2016-04-12 13:21:182016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之山东
日期:2016-02-16 11:37:52每日论坛发贴之星
日期:2016-02-07 06:20:00程序设计版块每日发帖之星
日期:2016-02-07 06:20:0015-16赛季CBA联赛之新疆
日期:2018-01-09 16:25:37
3 [报告]
发表于 2016-03-31 09:59 |只看该作者
回复 1# hmchzb19

python的特性就是不能很多次的递归,估计原因可能是因为python在后台维护了很多资源,比如调用栈需要很多的属性,每个属性可能又有很多属性....
就是最基本的属性,对应到C/C++上面是要占用不少内存等资源的....
实际用的资源就很多了

另外一方面.递归算法都可以转化为非递归的算法
python里面也有变通的方法的


   

论坛徽章:
13
CU大牛徽章
日期:2013-03-14 14:14:082016科比退役纪念章
日期:2016-07-22 11:15:35数据库技术版块每日发帖之星
日期:2016-05-27 06:20:002015亚冠之吉达阿赫利
日期:2015-08-05 10:06:542015年亚洲杯之韩国
日期:2015-04-01 16:05:42双鱼座
日期:2014-11-13 11:04:24丑牛
日期:2014-07-25 17:29:54子鼠
日期:2014-04-25 12:25:45丑牛
日期:2014-04-17 08:35:48巨蟹座
日期:2014-04-16 16:50:05CU大牛徽章
日期:2013-03-14 14:14:29CU大牛徽章
日期:2013-03-14 14:14:26
4 [报告]
发表于 2016-03-31 12:10 |只看该作者
回复 3# bskay


    你看2楼,我代码写错了.

python 修改stack 的递归深度很简单:
import sys
sys.setrecursionlimit(1000000)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP