|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 inver11 于 2019-8-22 17:26 编辑
问题如下:
输入一个列表和数字
判断数字在列表当中的排序并输出排序位置。(数字不添加到列表中)
例子如下:
有一个列表 [4,6,7,3,89,33,45,13,34,54]
给列表排序 [3, 4, 6, 7, 13, 33, 34, 45, 54, 89]
排序后再给一个数字40 判断40在列表中的位置
按照排序大小 如33<40<45 则40在列表中的位置应该为list[7
要求使用递归二分查找
我的分析流程如下
列表排序
如果数字在列表里 输出在列表中的位置
如果不在:
如果列表长度等于2: #如果只剩最后两个数的时候,分别判断即可 并且跳出循环
如果num>x[0]: 输出此时x[1] 在原列表X中的角标
如果num<x[0]: 输出此时x[0] 在原列表X中的角标
return 角标
查找中间的数字num对比大小
如果大于:
查找【num:】中间的数字对比大小 调用函数递归
如果小于:
查找【:num】中间的数字对比大小 调动函数递归
函数如下:
- list1 = [4,6,7,3,89,33,45,13,34,54]
- list1.sort()
- def digui(x,y,s=0,i=0):
- global list1
- if y in list1:
- s = list1.index(y)
- return s
- else:
- if len(x)==2 :
- if y>x[0]:
- i = x[1]
- s = list1.index(i)
- return s
- elif y<x[0]:
- i = x[0]
- s = list1.index(i)
- return s
- mid = len(x)//2
- if y>x[mid]:
- return digui(x[mid:],y)
- elif y<x[mid]:
- return digui(x[:mid],y)
- print(digui(list1,50))
复制代码
以下是报错信息
- Traceback (most recent call last):
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 24, in <module>
- print(digui(list1,50))
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 20, in digui
- return digui(x[mid:],y)
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 20, in digui
- return digui(x[mid:],y)
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 22, in digui
- return digui(x[:mid],y)
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 20, in digui
- return digui(x[mid:],y)
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 20, in digui
- return digui(x[mid:],y)
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 20, in digui
- return digui(x[mid:],y)
- [Previous line repeated 987 more times]
- File "C:/Users/Administrator.USER-20181219NC/Desktop/digui.py", line 5, in digui
- if y in list1:
- RecursionError: maximum recursion depth exceeded in comparison
复制代码
如果把要查找的数字换成是40 则输出6
实际上,按列表排序40 应该是排在[7]才对 输出也是错的
求大佬指点迷津
<div class="blockcode"><blockquote></blockquote></div><br /> |
|