C++ 树列表递归大问题2025年3月17日 | 阅读 7 分钟 在本文中,我们将通过几个例子讨论 C++ 中的大树列表问题。 引言设想一个计算数字阶乘的程序。此函数接收数字 N 作为输入,并返回 N 的阶乘作为结果。此函数的伪代码将类似于 示例 输出 Sum of natural numbers from 1 to 5 is: 15 说明
递归类型递归主要有两种类型
1. 线性递归每次执行时只调用自身一次的函数称为线性递归。阶乘函数是线性递归的一个很好的例子。“线性递归”这个名称指的是线性递归函数需要线性时间来执行。 示例 让我们看看下面的伪代码 输出 Countdown: 5 4 3 2 1 说明
现在让我们定义时间复杂度的递推关系 T(n) = T(n - 1) + K
根据此递推关系,使用参数 n执行函数所需的时间等于使用n - 1进行递归调用所需的时间,再加上打印 n 值所需的固定时间K。在这种情况下,该函数会无意中被调用n 次。 由于此代码的时间复杂度为O(n),因此完成它所需的时间与n成线性关系。函数接收n次调用,每次调用都会执行固定的工作。 2. 树递归当你在递归情况中多次进行递归调用时,就称为树递归。斐波那契数列是树递归函数的一个有效示例。树递归函数以指数时间运行;它们的时序复杂度不是线性的。 示例 看看下面的伪代码, 输出 Sum of tree values: 21 说明
递归树方法是如何工作的?递归树策略用于解决诸如 T(N)=T(N/2)+N 或我们之前讨论过的两种(递归类型部分中的线性递归和树递归)之类的递推关系。这些递推关系处理问题的常用方法是分治法。 当一个大问题被分解成更小的子问题时,需要时间来整合这些子问题的答案。 例如,T(N)=2T(N/2)+O(N)是归并排序的递推关系。在实现层面,将两个大小为T(N/2)的子问题的答案合并所需的时间是O(N)。在归并排序的归并步骤中,我们将两个已排序的数组合并以在线性时间内创建一个新的已排序数组。 例如,二分查找的递推关系是T(N)=T(N/2)+1,我们知道二分查找的每次重复都会将搜索空间减半。一旦确定了结果,我们就退出函数。因为这是一个常数时间操作,所以向递推关系中添加+1 +1。 考虑递推关系T(n)=2T(n/2)+Kn。Kn表示组合 n/2 维子问题答案所需的时间。 让我们描绘上述递推关系的递归树。 ![]() 通过研究上面的递归树,我们可以得出一些结论,包括
如何使用递归树解决递推关系子问题的成本是递归树方法中解决它所需的时间。因此,当“成本”一词与递归树相关时,它指的就是解决子问题所需的时间。 使用递归树方法,必须执行几个步骤来解决递推关系。包括,
结论
下一主题C++ 中的定时器实现 |
与任何其他语言中的数组一样,C++ 中的 vector 是动态的;因此,其大小不是固定的。为什么使用 vector?因为 C++ 数组是静态的,并且在定义后无法更改其宽度,这在存储数据量不断变化的数据集时并不理想……
阅读 4 分钟
C++ 标准库中提供了各种流来处理输入输出活动。其中一个流称为 cerr,它是“标准错误”的缩写。与用于一般用途的 cout 流不同,cerr 专门用于错误消息和诊断……
阅读 3 分钟
C++ 的 'Using' 与 'Typedef' C++ 有两个关键字可用于定义新类型:typedef 和 using。这两个关键字都允许您创建一个新的类型名称,用于声明变量,但它们的实现方式略有不同。typedef 是...
阅读 4 分钟
在本文中,您将了解 C++ 中的 std::substract_with_carry_engine 及其语法、参数和示例。什么是 std::subtract_with_carry_engine?C++ 模板类 std::subtract_with_carry_engine 实现了一个带进位减法的随机数引擎。该引擎定义在 <random> 头文件中,并包含在 C++ 标准库中。语法:它...
阅读 4 分钟
大多数时候,您将设计类,以便该类的任意两个实例都是独立的。也就是说,如果我们有两个对象 one 和 two,对 one 的更改不应该以任何方式影响 two。但是,在某些情况下,我们将希望共享数据...
7 分钟阅读
在本文中,我们将通过不同的方法找到矩阵的行列式。在找到行列式的值之前,我们必须了解矩阵的行列式。矩阵的行列式是仅为方阵(行数和列数相同的矩阵)指定的特定整数……
阅读 6 分钟
C++ 是一种功能强大的编程语言,它拥有庞大的标准库,可为许多操作提供有效的解决方案。通常,在处理数字数据时,需要将字符串转换为浮点数。C++ 标准库为此目的提供了三个基本函数:std::stod、...
阅读 4 分钟
在本文中,我们将讨论使用多种方法的 C++ 程序来计算数组中的逆序对。什么是逆序对数?数组的逆序对数表示数组的排序程度(或接近程度)。如果数组已排序,则逆序对数为...
阅读 6 分钟
必须使用仅使用整数运算的算法来绘制圆,而无需使用浮点数学。Bresenham 的圆绘制算法是为此目的常用算法之一。该方法仅使用整数算术,即可高效有效地创建圆。Bresenham 算法的一个版本...
阅读 6 分钟
在本文中,我们将讨论 C++ 中用于竞争性编程的 10 个最常用的内置函数。C++ 内置函数介绍 C++ 中的集成功能通常称为通用库功能或通过 C++ 标准模板库 (STL) 提供的功能。这些功能涵盖了广泛的...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India