1. 程式人生 > >Python遞迴二分法

Python遞迴二分法

# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] # 時間複雜度. n
# # 讓使用者輸入一個數n. 判斷這個n是否出現在lst中
# n = int(input("請輸入一個數字n:")) # 56
# for el in lst:
# if n == el:
# print('出現了')
# break
# else:
# print("沒出現")


# 使用二分法查詢來實現上述功能,
# 必須是有序序列
# print(2**28) # 268435456
# print(2**26) # 134217728



# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
#
# n = int(input("請輸入一個數字n:")) # 56
#
# left = 0 # 左邊界
# right = len(lst) - 1 # 末尾的索引 右邊界
# while left <= right: # 當左邊界大於右邊界結束迴圈
#
# mid = (left + right) // 2 # 求中間的索引座標
# if n < lst[mid]: # 判斷你的數字和中間數的大小比較 .
# right = mid - 1 # 右邊界往左移動
# elif n > lst[mid]:
# left = mid + 1 # 左邊界往右移動
# else:
# print("找到了") # 找到了目標數字
# break
# else: # 當左比右大, 迴圈結束. 沒有找到目標數
# print("沒找到")
#

# 0 1 2 3 4 5 6 7 8
# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

# def binary_search(lst, n, left, right):
# if left > right:
# return False
# mid = (left + right) // 2
# if n > lst[mid]:
# left = mid + 1
# # 當遞迴有返回值的時候. 需要寫return. 否則有可能接收不到返回值
# return binary_search(lst, n, left, right)
# elif n < lst[mid]:
# right = mid - 1
# return binary_search(lst, n, left, right)
# else:
# print("找到了")
# return True
#
#
# n = int(input("請輸入一個數字n:")) # 178
# ret = binary_search(lst, n, 0, len(lst)-1)
# print(ret)




# 切換列表
# def binary_search(lst, n):
# if len(lst) == 0:
# return False
# left = 0
# right = len(lst) - 1
# mid = (left + right) // 2
# if n > lst[mid]:
# left = mid + 1
# # 當遞迴有返回值的時候. 需要寫return. 否則有可能接收不到返回值
# return binary_search(lst[mid+1:], n)
# elif n < lst[mid]:
# right = mid - 1
# return binary_search(lst[:mid], n)
# else:
# print("找到了")
# return True
#
#
# n = int(input("請輸入一個數字n:")) # 178
# ret = binary_search(lst, n)
# print(ret)


# 遞迴深度
# def func():
# print("哈哈")
# func()
# func()
# python中最大的遞迴深度是1000 但是你永遠到不了1000 998左右不同系統不一樣
import sys # system python, os 作業系統
print(sys.getrecursionlimit()) #查詢最大遞迴深度
sys.setrecursionlimit(3000) # 設定最大遞迴深度 最大是3000 你到不了3000