algorithm - 一个子调用为 n/2 的递归函数的 Big Oh 表示法是什么?
问题描述
public static int div(int numItems)
{
if (numItems == 0)
return 0;
else
return numItems%2 + div(numItems/2);
}
我认为时间复杂度将是对数的,即 O(log n),但我无法弄清楚如何。谁能帮我这个?
解决方案
复杂度为 O(logn)。想象一下二进制表示中的数字。然后整数除以 2 相当于从该表示中删除最低有效位。当所有位都被消耗完后,基本情况就会启动。由于数字在其二进制表示中具有 O(logn) 位,这也是此递归函数的复杂性。
推荐阅读
- python - 将数字四舍五入为 3 sig figs python
- google-apps-script - 由工作表中出现的新行触发的脚本
- c# - .Net Core 中的 AES IGE(无限乱码扩展)模式
- css - 未知高度的弹性父项中的一个纵横比子项
- angular - Angular 8 - ngx-DataTable 不显示数据
- php - 您如何通过 PHP 中的 API 检索 google 日历的嵌入链接
- mysql - 当满足要求时,Mysql 将布尔值设置为 1 所有其他要求为 0
- http - 限制 HTTP POST 方法的响应正文大小
- c# - 在 ASP.Net Zero 中,为什么当我尝试使用 Angular UI 执行 API 时没有获取记录,但是当我使用 swagger 时它返回预期值?
- python - 在 ModelSerializer 的“更新”方法中引发 APIException 不响应所需的状态代码