Hello 算法 1.1.0 Java版2.1 算法效率评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2 迭代与递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 时间复杂度 . . . 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 系”“四次方 关系”,以此类推。 2.2.2 递归 递归(recursion)是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版2.1 算法效率评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2 迭代与递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 时间复杂度 . . . 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 ”“四次方 关系”,以此类推。 2.2.2 递归 「递归 recursion」是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版2.1 算法效率评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2 迭代与递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 时间复杂度 . . . 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 系”“四次方 关系”,以此类推。 2.2.2 递归 递归(recursion)是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 Java版2.1 算法效率评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 迭代与递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 时间复杂度 . . . 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在数据结构与算法中,重复执行某个任务是很常见的,其与算法的复杂度密切相关。而要重复执行某个任务, 我们通常会选用两种基本的程序结构:迭代和递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 、“四次方 关系”、以此类推。 2.2.2 递归 「递归 recursion」是一种算法策略,通过函数调用自身来解决问题。它主要包含两个阶段。 1. 递:程序不断深入地调用自身,通常传入更小或更简化的参数,直到达到“终止条件”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。0 码力 | 376 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b1 Java版线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 19 � 部分示例代码需要一些前置知识,包括数组、递归算法等。如果遇到看不懂的地方无需担心, 可以在学习完后面章节后再来复习,现阶段先聚焦在理解时间复杂度含义和推算方法上。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? - 1 return count; } Figure 2‑5. 指数阶的时间复杂度 在实际算法中,指数阶常出现于递归函数。例如以下代码,不断地一分为二,分裂 ? 次后停止。 // === File: time_complexity.java === /* 指数阶(递归实现) */ int expRecur(int n) { if (n == 1) return 1; return } return count; } Figure 2‑6. 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.java === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Java版线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 2. 复杂度分析 hello‑algo.com 19 � 部分示例代码需要一些前置知识,包括数组、递归算法等。如果遇到看不懂的地方无需担心, 可以在学习完后面章节后再来复习,现阶段先聚焦在理解时间复杂度含义和推算方法上。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 ? - 1 return count; } Figure 2‑5. 指数阶的时间复杂度 在实际算法中,指数阶常出现于递归函数。例如以下代码,不断地一分为二,分裂 ? 次后停止。 // === File: time_complexity.java === /* 指数阶(递归实现) */ int expRecur(int n) { if (n == 1) return 1; return } return count; } Figure 2‑6. 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.java === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 Java版< ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < 指数阶 < 阶乘阶 Figure 2‑3. 时间复杂度的常见类型 � 部分示例代码需要一些预备知识,包括数组、递归算法等。如果遇到不理解的部分,请不要担 心,可以在学习完后面章节后再回顾。现阶段,请先专注于理解时间复杂度的含义和推算方法。 常数阶 ?(1) 常数阶的操作数量与输入数据大小 ? 无关,即不随着 复杂度 hello‑algo.com 23 Figure 2‑5. 指数阶的时间复杂度 在实际算法中,指数阶常出现于递归函数。例如以下代码,不断地一分为二,经过 ? 次分裂后停止。 // === File: time_complexity.java === /* 指数阶(递归实现) */ int expRecur(int n) { if (n == 1) return 1; return } return count; } Figure 2‑6. 对数阶的时间复杂度 与指数阶类似,对数阶也常出现于递归函数。以下代码形成了一个高度为 log2 ? 的递归树。 // === File: time_complexity.java === /* 对数阶(递归实现) */ int logRecur(float n) { if (n <= 1) return 0; return0 码力 | 342 页 | 27.39 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Java 版限的,過深的遞迴可能導致堆疊溢位錯誤。 2. 尾遞迴 有趣的是,如果函式在返回前的最後一步才進行遞迴呼叫,則該函式可以被編譯器或直譯器最佳化,使其在 空間效率上與迭代相當。這種情況被稱為尾遞迴(tail recursion)。 ‧ 普通遞迴:當函式返回到上一層級的函式後,需要繼續執行程式碼,因此系統需要儲存上一層呼叫的上 下文。 ‧ 尾遞迴:遞迴呼叫是函式返回前的最後一個操作,這意味著函式返回到上一層級後,無須繼續執行其他 設為函式參數,從而實現尾遞迴: // === File: recursion.java === /* 尾遞迴 */ int tailRecur(int n, int res) { // 終止條件 if (n == 0) return res; // 尾遞迴呼叫 return tailRecur(n - 1, res + n); } 尾遞迴的執行過程如圖 2‑5 所示。對比普通遞迴和尾遞迴,兩者的求和操作的執行點是不同的。 ‧ 普通遞迴:求和操作是在“迴”的過程中執行的,每層返回後都要再執行一次求和操作。 ‧ 尾遞迴:求和操作是在“遞”的過程中執行的,“迴”的過程只需層層返回。 圖 2‑5 尾遞迴過程 Tip 請注意,許多編譯器或直譯器並不支持尾遞迴最佳化。例如,Python 預設不支持尾遞迴最佳化,因 此即使函式是尾遞迴形式,仍然可能會遇到堆疊溢位問題。 3. 遞迴樹 當處理與“分治”相關的演算法問題0 码力 | 379 页 | 18.79 MB | 10 月前3
Java 应用与开发 - 异常处理文件被误删 除。 O 虚拟机错误(VirtualMachineError) 当 Java 虚拟机崩溃或资源耗尽时会抛出该错误。其中比较有代 表性的是 StackOverflowError,当应用程序递归太深而导致栈内 存溢出时会出现该异常。 课程配套代码 ± sample.exception.VMErrorSample.java 大纲 异常的概念及分类 Java 异常处理机制 常见错误 O 文件被误删 除。 O 虚拟机错误(VirtualMachineError) 当 Java 虚拟机崩溃或资源耗尽时会抛出该错误。其中比较有代 表性的是 StackOverflowError,当应用程序递归太深而导致栈内 存溢出时会出现该异常。 课程配套代码 ± sample.exception.VMErrorSample.java 大纲 异常的概念及分类 Java 异常处理机制 常见异常 O0 码力 | 33 页 | 626.40 KB | 1 年前3
Java 基础之IO 和NIO 补完//deleting file failed e.printStackTrace(); } 7. Files.walkFileTree() ● Files.walkFileTree()用来递归遍历文件目录,有Path实例和FileVisitor来做参数。 ● FileVisitor接口有如下形式: public interface FileVisitor { public FileVisitResult0 码力 | 9 页 | 218.38 KB | 1 年前3
共 12 条
- 1
- 2













