Java 中的 Kynea 数2025年3月17日 | 阅读 7 分钟 在本节中,我们将学习什么是 Kynea 数,并创建Java 程序来计算Kynea 数。Kynea 数程序经常出现在 Java 编码面试和学术中。 Kynea 数是递归定义的数字,如下所示: F(k) = 4 x F(k - 1) - 2 k + 1 + 3,其中 F(0) 等于 2。 因此, 对于 k = 1, F(1) = 4 x F(1 - 1) - 2 1 + 1 + 3 = 4 x F(0) - 22 + 3 = 4 x 2 - 4 + 3 = 8 - 4 + 3 = 4 + 3 = 7 对于 k = 2,, F(2) = 4 x F(2 - 1) - 2 2 + 1 + 3 = 4 x F(1) - 23 + 3 = 4 x 7 - 8 + 3 = 28 - 8 + 3 = 20 + 3 = 23 对于 k = 3,, F(3) = 4 x F(3 - 1) - 2 3 + 1 + 3 = 4 x F(2) - 24 + 3 = 4 x 23 - 16 + 3 = 92 - 16 + 3 = 76 + 3 = 79 对于 k = 4,, F(4) = 4 x F(4 - 1) - 2 4 + 1 + 3 = 4 x F(3) - 25 + 3 = 4 x 79 - 32 + 3 = 316 - 32 + 3 = 284 + 3 = 287 对于 k = 5,, F(5) = 4 x F(5 - 1) - 2 5 + 1 + 3 = 4 x F(4) - 26 + 3 = 4 x 287 - 64 + 3 = 1148 - 64 + 3 = 1084 + 3 = 1087 方法:使用递归上述递归公式可以使用递归轻松实现。请观察以下程序。 文件名: KyneaNumbers.java 输出 The first 10 Kynea Numbers are: 2 7 23 79 287 1087 4223 16639 66047 263167 复杂度分析:该程序使用递归和快速幂运算。递归直到 k = 0,因此,对于递归,时间复杂度为 O(k),对于快速幂运算,时间复杂度为 O(log2(k + 1))。因此,该程序的总体时间复杂度为 O(k * log2(k + 1)),其中 k 是必须找到的第 k 个 Kynea 数。该程序不使用任何额外空间,因此空间复杂度为常数,即 O(1)。 方法:使用辅助数组借助辅助数组,我们可以避免递归以降低时间复杂度。以下程序显示了这一点。 文件名: KyneaNumbers1.java 输出 The first 10 Kynea Numbers are: 2 7 23 79 287 1087 4223 16639 66047 263167 复杂度分析:程序的 [时间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-time-complexity/) 只在于快速幂运算。因此,程序的[时间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-time-complexity/)为 O(log2(k + 1),其中 k 是必须找到的第 k 个 Kynea 数。由于程序使用辅助数组来存储先前计算的结果,因此[空间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-space-complexity/)为 O(n),其中 n 是必须找到的 Kynea 数的总数。 我们仍然可以降低程序的[空间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-space-complexity/),因为从递归公式可以明显看出,当前值仅取决于先前计算的值。请观察以下程序。 文件名: KyneaNumbers2.java 输出 The first 10 Kynea Numbers are: 2 7 23 79 287 1087 4223 16639 66047 263167 复杂度分析:程序的[时间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-time-complexity/)与前一个程序相同。然而,程序的[空间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-space-complexity/)为 O(1),因为程序不使用任何辅助数组。 方法:使用数学公式寻找 Kynea 数的数学公式是: F(k) = 4k + 2k + 1 - 1,对于 k >= 0 因此, F(0) = 40 + 20 + 1 - 1 = 1 + 21 - 1 = 2 F(1) = 41 + 21 + 1 - 1 = 4 + 22 - 1 = 4 + 4 - 1 = 7 F(2) = 42 + 22 + 1 - 1 = 42 + 23 - 1 = 16 + 8 - 1 = 23 F(3) = 43 + 23 + 1 - 1 = 43 + 24 - 1 = 64 + 16 - 1 = 79 F(4) = 44 + 24 + 1 - 1 = 44 + 25 - 1 = 256 + 32 - 1 = 287 F(5) = 45 + 25 + 1 - 1 = 45 + 26 - 1 = 1024 + 64 - 1 = 1087 观察使用此数学公式计算 Kynea 数的以下程序。 文件名: KyneaNumbers2.java 输出 The first 10 Kynea Numbers are: 2 7 23 79 287 1087 4223 16639 66047 263167 复杂度分析:程序的[时间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-time-complexity/)和[空间复杂度](https://www.geeksforgeeks.org/analysis-of-algorithms-space-complexity/)与前一个程序相同。 下一主题Java 中的 UTF |
在本节中,我们将讨论什么是无平方数,并创建 Java 程序来检查给定的数字是否为无平方数。无平方数程序经常出现在 Java 编码面试和学术界。无平方数是指一个正整数...
阅读 4 分钟
Java 中的 GP(等比数列)问题数量涉及确定给定数字集中有效等比数列的数量。等比数列由公比定义,在各个领域都很重要。在本教程中,我们将找到 GP 数列的数量……
阅读 10 分钟
在计算机科学中,计算给定矩阵中的路径数量是一个常见问题,可以通过多种方式解决。在本节中,我们将讨论在 Java 中计算给定矩阵中路径的三种不同方法。问题陈述 我们有一个 2D...
7 分钟阅读
在编程竞赛中,不仅需要解决问题的能力和技巧,还需要高效解决问题的能力。在 Java 中,以下是一些可以帮助您在时间限制内解决问题时表现更好的技巧和窍门。 1. 检查...
阅读 28 分钟
equals() 和 hashcode() 是 Object 类提供的两个重要方法,用于比较对象。由于 Object 类是所有 Java 对象的父类,因此所有对象都继承了这两个方法的默认实现。在本主题中,我们将看到...
阅读 3 分钟
Collections Framework 下的 addAll() 方法对于将一个集合中的元素批量添加到另一个集合中至关重要,并且该方法在 java 下的 AbstractCollection 类中实现。它属于 util 包,并作为...的骨架实现。
阅读9分钟
Java 中的迭代器是 Java 集合框架的一部分。它们用于逐个检索元素。Java 集合支持两种类型的迭代器:快速失败(Fail Fast)和安全失败(Fail Safe)。这些迭代器在异常处理中非常有用。快速失败迭代器会中止操作……
5 分钟阅读
| Java ArrayList 大小 ArrayList 是 java.util 包的一部分,用于存储对象的动态列表。当添加或删除元素时,ArrayList 的大小可以动态地增加或减少。在 Java 中,要获取长度(元素数量)...
阅读 4 分钟
? 在 Java 中,菱形问题与多重继承有关。有时也称为致命菱形问题或致命的死亡菱形。这样的挑战之一是“菱形问题”,它出现在多重继承的上下文中。在本节中,我们将...
5 分钟阅读
Java 的 default 关键字是一个访问修饰符。如果我们没有为变量、方法、构造函数和类分配任何访问修饰符,默认情况下,它被认为是默认访问修饰符。default 关键字是一个多功能且强大的工具,它在...中起着至关重要的作用。
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India