Java 中的 Jacobsthal 数2024年9月10日 | 阅读 6 分钟 在本节中,我们将学习如何在 Java 中查找 Jacobsthal 数。数学上,Jacobsthal 数定义为 Ja = (2a - (-1)a) / 3,其中 a >= 0 因此, 对于 a = 0, J0 = (20 - (-1)0) / 3 = (1 - (1)) / 3 = 0 / 3 = 0 对于 a = 1, J1 = (21 - (-1)1) / 3 = (2 - (-1)) / 3 = 3 / 3 = 1 对于 a = 2, J2 = (22 - (-1)2) / 3 = (4 - (1)) / 3 = 3 / 3 = 1 对于 a = 3, J3 = (23 - (-1)3) / 3 = (8 - (-1)) / 3 = 9 / 3 = 3 对于 a = 4, J4 = (24 - (-1)4) / 3 = (16 - (1)) / 3 = 15 / 3 = 5 对于 a = 5, J4 = (25 - (-1)5) / 3 = (32 - (-1)) / 3 = 33 / 3 = 11 实施让我们看看如何实现上述数学公式。请看下面的 Java 程序。 文件名: JacobsthalNumberExample1.java 输出 The first 20 Jacobsthal numbers are: 0 1 1 3 5 11 21 43 85 171 341 683 1365 2731 5461 10923 21845 43691 87381 174763 使用递归也可以使用递归来查找 jacbosthal 数。但是,要使用递归查找 jacbsthal 数,我们必须知道它的递归公式。 J0 = 0 and J1 = 1 & Ja = Ja - 1 + 2 * Ja - 2,对于 a >= 2 因此, 对于 a = 2 J2 = J2 - 1 + 2 * J2 - 2 = J1 + 2 * J0 = 1 + 2 * 0 = 1 + 0 = 1 对于 a = 3, J3 = J3 - 1 + 2 * J3 - 2 = J2 + 2 * J1 = 1 + 2 * 1 = 1 + 2 = 3 对于 a = 4, J4 = J4 - 1 + 2 * J4 - 2 = J3 + 2 * J2 = 3 + 2 * 1 = 3 + 2 = 5 对于 a = 5, J5 = J5 - 1 + 2 * J5 - 2 = J4 + 2 * J3 = 5 + 2 * 3 = 5 + 6 = 11 实施让我们看看上述递归公式的实现。 文件名: JacobsthalNumberExample2.java 输出 The first 20 Jacobsthal numbers are: 0 1 1 3 5 11 21 43 85 171 341 683 1365 2731 5461 10923 21845 43691 87381 174763 迭代实现除了递归,也可以使用循环来查找 jacbsthal 数。下面的程序对此进行了说明。 实施让我们以迭代的方式看看上述递归公式的实现。 文件名: JacobsthalNumberExample3.java 输出 The first 20 Jacobsthal numbers are: 0 1 1 3 5 11 21 43 85 171 341 683 1365 2731 5461 10923 21845 43691 87381 174763 上述程序使用一个数组来计算 jacbsthal 数,其大小取决于我们想要查找的 jacbsthal 数的总数。因此,要计算多达 10 个 jacbsthal 数,我们将使用大小为 10 的数组,要计算多达 20 个 jacbsthal 数,我们将使用大小为 20 的数组。如果我们仔细观察,会发现当前的 jacbsthal 数取决于最后两个 jacbsthal 数。在下面的递归公式中, Ja = Ja - 1 + 2 * Ja - 2 Ja - 1 是最后一个 jacbsthal 数,Ja - 2 是倒数第二个 jacbsthal 数。 因此,我们可以不使用数组,而只使用两个变量来查找 jacbsthal 数。下面的程序说明了这一点。 文件名: JacobsthalNumberExample4.java 输出 The first 20 Jacobsthal numbers are: 0 1 1 3 5 11 21 43 85 171 341 683 1365 2731 5461 10923 21845 43691 87381 174763 注意:上述方法是查找 Jacobsthal 数的最佳方法,因为程序的空间复杂度为 O(1),而且与其它方法相比,它耗时最少。下一主题Java BLOB |
Java 是一种著名的计算机语言,已经使用了二十多年。有几个关键功能使开发人员能够构建高效且优雅的代码。例如,List sort() 函数用于按升序或降序对 List 进行排序。在本...
阅读 4 分钟
组合是一种设计或实现“has-a”关系的方式。组合和继承都是设计技术。继承用于实现“is-a”关系。“has-a”关系用于确保我们程序中的代码可重用性。在组合中,我们使用一个...
阅读 4 分钟
Java 是一种广泛使用的面向对象编程语言,以其多功能性、可移植性和健壮性而闻名。Java 编程中的一个基本概念是对象复制和相等性检查的概念。然而,在其看似简单的外观之下,隐藏着一个称为“浅复制”的细微概念……
阅读 6 分钟
在 Java 编程中,有许多记录系统对于正确存储和操作数据至关重要。其中一种事实形状是 ArrayList,它是一个动态数组,可以根据需要增长或缩小。在某些时候,我们可能会遇到条件...
阅读 4 分钟
为了实现并行,Java 开发人员有时必须在多进程和多线程之间做出决定。这两种方法都有优点和缺点,因此了解它们之间的区别可以帮助我们为特定需求选择最佳方法。Java 中的多线程 划分过程...
阅读 3 分钟
在计算机编程领域,最大乘积子数组问题是一个常见的挑战,它要求在整数数组中找到具有最大乘积的连续子数组。这个问题可以使用动态规划技术有效地解决。在本文中,我们将……
阅读 4 分钟
Java 中的 IdentityHashMap 类 IdentityHashMap 类类似于 HashMap 类。它实现了 AbstractMap 类。然而,它在比较键(或值)时使用引用相等性而不是对象相等性。它不是 Map 的通用实现。虽然此类实现了...
阅读 12 分钟
Java 中的按位与 (&) 和逻辑与 (&&) 运算符之间的区别 在 Java 中,&(按位与)和 &&(逻辑与)运算符具有不同的目的和行为。虽然两个运算符都涉及 AND 的概念,但它们应用于不同的上下文。按位与 (&) 运算符 单一 AND……
阅读 4 分钟
委托事件模型是为处理 GUI 编程语言中的事件而定义的。GUI 代表图形用户界面,用户通过图形/视觉方式与系统进行交互。GUI 编程本质上是事件驱动的;每当用户启动一项活动,例如鼠标活动、点击、滚动……
7 分钟阅读
java.io # 提供了各种类,用于从文件系统、 CD 等各种源向程序输入数据,以及用于输出。# 中的各种类将在下面讨论:类描述 BufferedInputStream 类负责为其他输入...提供功能。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India