def search(num,seq=[]): if len(seq)==1: # print("3")# assert seq[0]==num
# num1=seq[0]
return seq[0] elif num<seq[len(seq)//2]: # print("2")
seq=seq[0:len(seq)//2]
search(num,seq=seq[:]) return 2 elif num > seq[len(seq)//2]: # print("1")
seq=seq[len(seq)//2+1:]
search(num,seq=seq[:]) else: # print("5")
return seq[len(seq)//2]def test(seq): return 2seq=[1,2,3,4,5,6,7,8]
seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))None
[1, 2, 3, 4, 5, 6, 7, 8]2上例為實現二分法的示例,輸出search(6,seq)函數應該返回搜索值,但是總是返回None,請各位幫忙解決
1 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
至少也應該是這樣的:
def search(num,seq=[]): if len(seq)==1: return seq[0] elif num<seq[len(seq)//2]: seq=seq[0:len(seq)//2] return search(num,seq=seq[:]) elif num > seq[len(seq)//2]: seq=seq[len(seq)//2+1:] return search(num,seq=seq[:]) else: return seq[len(seq)//2]def test(seq): return 2seq=[1,1,2,3,4,5,6,7,8] seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))
但你的代碼是返回搜索值(而非index),在不破壞源程序結構的情況下可以改成這樣來返回index:
def search(num,seq=[]): mid=len(seq)//2 if len(seq)==1: return 0 elif num<seq[mid]: return mid+search(num,seq=seq[0:mid]) elif num > seq[mid]: return mid+search(num,seq=seq[mid+1:]) else: return middef test(seq): return 2seq=[1,1,2,3,4,5,6,7,8] seq.sort()print(search(6,seq=seq[:]))print(seq)print(test(seq))
- 1 回答
- 0 關注
- 667 瀏覽
添加回答
舉報
0/150
提交
取消