python - 如何计算二分查找的步数?
问题描述
此代码仅返回目标的位置。我还需要计算步数。如何修改此代码以实现我的目标?
def binary_search(arr, low, high, x):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x)
else:
return binary_search(arr, mid + 1, high, x)
else:
return -1
LT = [1,2,3,4,5,6,7,8,9,10]
pos = binary_search(LT,0,9,5)
print(str(pos))
解决方案
您可以将其添加为函数参数并递归更新
def binary_search(arr, low, high, x, steps = 0):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
print(f"found at {steps} steps")
return mid
elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x, steps + 1)
else:
return binary_search(arr, mid + 1, high, x, steps + 1)
else:
return -1
推荐阅读
- html - 表格在我的电子邮件模板上看起来不正确
- reactjs - 将状态提取到 Redux
- html - 使用 3 个图像在 css 中创建内联翻转图像
- typescript - 如何使用 typescript 和 bcrypt 在 sequelize 模型中添加方法?
- python - 如何检查 PyTorch 中的所有梯度权重是否为零?
- nginx - 如何配置 NGINX 以提供具有 gzip 压缩的自定义扩展名的文件?
- python - ValueError:无法强制列表
到系列/数据框 - python - 使用python连接到kibana索引
- sql - Oracle SQL:使用子查询
- javascript - 臭名昭著的海龙