# äºåæ³æ¥æ¾ äºåæ³æ¥æ¾ï¼é¡¾åæä¹ï¼äºåãäºåå°±æ¯åæä¸¤ååã(æçç¿»è¯æ¯`æåæ³æç´¢`æ¯å¦SICPéç¿»è¯çå°±æ¯`æåæ³æç´¢`)ãå®çå¤æåº¦ä¸ºO(logn)ï¼å¨å表(å·²æåº)ä¸å¯¹ç»å®å¼`value`è¿è¡æ¥æ¾å¹¶è¾åºå ¶ç´¢å¼(index)å¼ã ```python # -*- coding: utf-8 -*- def binary_search(lst, value): left, right = 0, len(lst) - 1 while left <= right: middle = (left + right) // 2 # å`lst`ä¸å¼ç´¢å¼ if value > lst[middle]: left = middle + 1 # value大äº`lst`ä¸å¼ï¼è®©å·¦è¾¹ççäº middle + 1 elif value < lst[middle]: right = middle - 1 # ç±»ä¼¼ä¸ else: return "The value's index is {}".format(middle) return "There is no {}".format(value) if __name__ == '__main__': lst = [1, 3, 5, 7, 9] value = int(input("Please input the value(1-10): ")) print(binary_search(lst, value)) ``` åæ¥ä¸ªéå½(recursion)ççå§ï¼ ä¸ä½è¿å¤è§£éå¦ï¼ ```python # -*- coding: utf-8 -*- def binary_search_rec(lst, value, left, right): middle = (left + right) // 2 if left > right: return "I'm sorry, there is no {}".format(value) if value < lst[middle]: return binary_search_rec(lst, value, left, middle - 1) elif value > lst[middle]: return binary_search_rec(lst, value, middle + 1, right) else: return "Congratulations, the value's({}) index is {}".format(value, middle) if __name__ == '__main__': lst = [1, 3, 5, 7, 9] left, right = 0, len(lst) value = int(input("Please input the value: ")) print(binary_search_rec(lst, value, left, right)) ``` æ¨å¤©é¢è¯,é¢è¯å®åºäºä¸éç®æ³é¢: > æä¸ä¸ªæ°ç»,å ¶å å ç´ å éå¢åéå,请æ¾åºå ¶ä¸çæå¤§å¼. å¯¹äºææ¥è¯´,彿¶ç¬¬ä¸ä¸ªæ³èµ·æ¥çæ¯,`æåº`使¯è½¬å¿µé´å°±ç¥éè¯å®ä¸æ¯æå¥½çå¦.äºæ¯å°±å¨åªå¿æ³åæ³,è¿æ¯æ³ä¸èµ·æ¥.æ°æ°æºå°´å°¬ç,å¤é¢ä¹æºå·ç(çµè¯é¢è¯,å¤é¢å®é).ææ³ä¸èµ·æ¥,é¢è¯å°å¥ä¹ä¸æ¥ç嬿,æåä¹ç®æ¯å¨å°å¥çæç¤ºä¸,æ³èµ·äºæä¹åå¦!(太æè°¢å°å¥å¦, å°å¥å¥½äºº! å, ä½ ä»¬å 个ä¸è®¸ç¬åå!) å½ç¶æ¯**äºå**å¦,ä¸é¢æ¯ç®æ³å®ç°! ```python # coding=utf-8 def search_max_num(seq, left, right): mid = (right + left) // 2 if left > right: return seq[mid] if seq[mid] > seq[mid - 1]: return search_max_num(seq, mid + 1, right) else: return search_max_num(seq, left, mid - 1) if __name__ == "__main__": seq = [32, 55, 54, 54, 54, 54, 32, 15, 6, 4, 2, 1] print(search_max_num(seq, 0, len(seq))) ```