递归斐波那契算法的空间复杂度是多少?

2023-12-25

这是《破解编码面试》(第五版)中斐波那契数列的递归实现

int fibonacci(int i) {
       if(i == 0) return 0;
       if(i == 1) return 1;
       return fibonacci(i-1) + fibonaci(i-2);
}

After watching the video on the time complexity of this algorithm, Fibonacci Time Complexity https://www.youtube.com/watch?v=ncpTxqK35PI, I now understand why this algorithm runs in O(2n). However, I am struggling with analyzing the space complexity.

我在网上查了一下,对此有一个疑问。

在这个 Quora 帖子中,作者指出“在你的例子中,你有 n 个堆栈帧 f(n)、f(n-1)、f(n-2)、...、f(1) 和 O(1 )”。你不会有 2n 个堆栈帧吗?对于 f(n-2) 来说,一帧将用于实际调用 f(n-2),但不会还有来自 f(n-1) 的调用 f(n-2) 吗?


这是一个提示。使用 print 语句修改代码,如下例所示:

int fibonacci(int i, int stack) {
    printf("Fib: %d, %d\n", i, stack);
    if (i == 0) return 0;
    if (i == 1) return 1;
    return fibonacci(i - 1, stack + 1) + fibonacci(i - 2, stack + 1);
}

现在在 main 中执行这一行:

Fibonacci(6,1);

打印出来的“stack”的最高值是多少。你会看到它是“6”。尝试“i”的其他值,您会发现打印的“stack”值永远不会高于传入的原始“i”值。

由于 Fib(i-1) 在 Fib(i-2) 之前完成评估,因此永远不会超过i递归级别。

因此,O(N)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归斐波那契算法的空间复杂度是多少? 的相关文章

  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access

随机推荐

  • HTML 按钮类似于 ASP.NET 按钮

    如何像 ASP NET 按钮一样使用 HTML 按钮 Html 标签归因于runat server 被称为 HtmlControls 并且你需要处理ServerClick event Markup
  • 使用 XML 而不是通过注释来配置 hibernate 是否有充分的理由?

    我已经使用 Hibernate 几年了 但仅将其与注释一起使用 并在代码中设置连接参数 我是否因为不使用 XML 文件而 遗漏了一些东西 是否存在仅在 XML 中可用的重要功能 是否存在使用 XML 有意义的情况或模式 我认为可以肯定地说您
  • JavaScript:在一台虚拟机中进行所有评估

    我正在创建一个自定义 JavaScript 控制台 我希望它的工作方式与开发工具中的控制台完全相同 或者 类似 REPL 的东西 https github com MohammadMD1383 js interactive https gi
  • 使用 PHP DOM 在 html 标签开头插入创建的元​​素

    我正在尝试插入 HTML打开后立即标记使用 dom 的页面标签 我尝试过使用appendChild它只是将其插入之前这可不行 我使用的代码 head dom gt getElementsByTagName head gt item 0 ba
  • EF 4.1 异常“提供程序未返回 ProviderManifestToken 字符串”

    我正在尝试复制 MSDN 上找到的示例 我正在使用 ASP NET 和 EF 4 1 CTP 我使用 NuGet 来安装 EntityFramework 包 我收到此错误 The provider did not return a Prov
  • Mapbox 地图在 Android 上不显示

    当我前几次测试它时 它显示得非常好 然后我添加了一些代码 它就停止了 它仍然在左下角屏幕上显示 Mapbox 徽标 但没有加载地图 这是上面的代码MapActivity public class MapActivity extends Ap
  • Kotlin setOnClickListener 使用方法引用不起作用

    我尝试以与 Java 中相同的方式使用方法引用 button setOnClickListener this clickListener 使用科特林 button setOnClickListener this clickListener
  • 使用 FFTW 进行图像卷积时,内核在哪里居中?

    我正在尝试使用 FFTW 进行图像卷积 起初只是为了测试系统是否正常工作 我执行了 fft 然后执行了逆 fft 并且可以返回完全相同的图像 然后向前迈出了一小步 我使用了恒等内核 即 kernel 0 0 1 而所有其他组件等于 0 我取
  • MySQL 在表中向 UUID 添加破折号

    有没有一种简单的方法来转换这种格式的 UUID 5967ca5e6162317eb4a825dcdcde0aea 到这个格式 5967ca5e 6162 317e b4a8 25dcdcde0aea 使用 MySQL 查询 我需要转换超过
  • 如何防止整个类被序列化?

    我正在使用 Newtonsoft Json 来序列化一个类及其所有成员 有一个特定的类 它的许多成员都是其实例 我只想告诉一个类根本不被序列化 因此如果任何属于该类型实例的成员都会被跳过 在 C 中是否可以通过向类附加某种属性来将其标记为不
  • Eclipse 清理 - 什么是“.index”文件 - 我可以安全地删除它们吗?

    尝试减小我的 数据库同步 工作区的大小 意识到该文件夹 workspace loc metadata plugins org eclipse jdt core 占用约 35 MB 文件夹的内容是 index文件 占用最多空间 和其他一些文件
  • 当 C++ 代码在某些非 C++ 程序中使用时,C++ 运行时调用 Terminate() 是否“合法”?

    在某些情况下 特别是当异常在堆栈展开期间逃逸析构函数时 C 运行时调用terminate 它必须做一些合理的事后分析 然后退出程序 当出现 为什么如此严厉 的问题时 答案通常是 在这种错误情况下没有什么比这更合理的事情了 如果整个程序都是用
  • AsyncFileUpload 文件大小限制

    当我使用时AsyncFileUpload上传100KB图像 我没有收到错误消息 但图像未上传 我可以成功上传 75 KB 的图像 我使用的是 IIS 6 0
  • Genymotion 无法在 Windows 10 上加载 VirtualBox 引擎

    我最近升级到 Windows 10 BUILD 10130 由于某些原因 Genymotion 似乎无法工作 它显示 无法加载 VirtualBox 引擎 现在我做了一些研究 所有的解决方案都建议删除仅主机网络从虚拟盒设置 嗯 这是我没有列
  • Android“工具提示”

    当前的 Android YouTube 应用程序提供了有关用户界面导航的有用提示 例如 用户第一次在视频播放时在选项卡之间切换时 会弹出一个带有箭头的小 工具提示 并显示 您还可以通过向左和向右滑动来在选项卡之间切换 或类似的东西 有没有办
  • 模态 javascript 弹出窗口(如 fancybox)是否会影响 seo 爬虫

    我们正在我们的内容页面之一上测试模态 z 层样式弹出窗口 fancybox javascript 实现 该弹出窗口会阻止用户在未注册的情况下与页面其余部分进行交互 我很好奇这对爬虫 googlebot 有什么影响 我们知道模式弹出窗口对排名
  • Cordova 无法加载 platformapi

    我已经有这个问题好几天了 Cordova 无法在浏览器中运行 错误提示浏览器未添加为平台 但是 尝试将浏览器添加为平台时 会导致另一个错误 显示 无法从平台加载 platfromapi 它还说浏览器不是有效的平台 看截图 科尔多瓦问题 1
  • apache 如何动态使用“Header set Set-Cookie expires=

    我使用 apache 作为负载均衡器和反向代理 为了会话粘性 我使用节点的路由创建一个 cookie Header set Set Cookie h BALANCER WORKER ROUTE e path domain domain co
  • 如何检测通过省略号传递的参数的大小?

    以下代码按预期工作GCC https godbolt org z bbcdfj and Clang https godbolt org z WPc79z 但是 我相信它包含未定义的行为 它起作用的可能原因是省略号中的参数在堆栈中以 64 位
  • 递归斐波那契算法的空间复杂度是多少?

    这是 破解编码面试 第五版 中斐波那契数列的递归实现 int fibonacci int i if i 0 return 0 if i 1 return 1 return fibonacci i 1 fibonaci i 2 After w