JAVA算法经典:兔子繁殖与素数判断

需积分: 12 5 下载量 189 浏览量 更新于2024-07-18 1 收藏 191KB DOC 举报
"经典算法40题,包括JAVA编程中的算法实现,如斐波那契数列、素数判断和水仙花数等" 在编程学习过程中,掌握算法是非常关键的一环,因为它能帮助我们解决复杂问题并提高代码效率。这里我们讨论了三道经典的JAVA算法题,它们分别是: 1. 斐波那契数列 斐波那契数列是一个序列,其中每个数字是前两个数字的和。它的前几项是1, 1, 2, 3, 5, 8, 13, 21...。在【程序1】中,我们看到两种实现斐波那契数列的方法:递归和非递归。递归方法虽然直观,但效率较低,因为存在大量的重复计算。非递归方法通过循环避免了重复计算,提高了效率。 ```java public static int f(int x) { if (x == 1 || x == 2) return 1; else return f(x - 1) + f(x - 2); } ``` 另一种优化的递归方法是使用动态规划,保存已计算过的值,避免重复计算。 2. 素数判断 在【程序2】中,我们需要找出101到200之间的所有素数。素数是只有两个正因子(1和自身)的大于1的自然数。这里使用了一个简单的判断方法,即检查从2到平方根(x)的所有数是否能整除x。如果可以整除,那么x不是素数,否则是素数。 ```java public boolean isZhishu(int x) { for (int i = 2; i <= x / 2; i++) if (x % i == 0) return false; return true; } ``` 为了提高效率,我们可以只检查到x的平方根,而不是x/2,因为一个非素数一定有小于或等于其平方根的因子。 3. 水仙花数 水仙花数是指一个三位数,其各位数字立方和等于它本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在【程序3】中,我们需要遍历100到999的所有三位数,检查它们是否为水仙花数。 ```java public static void printNarcissisticNumbers() { for (int i = 100; i < 1000; i++) { int sum = i / 100 * 100 + i / 10 % 10 * 10 + i % 10; if (sum == i) System.out.println(i); } } ``` 这40题中的每一道都涉及基础的算法和数据结构,是JAVA入门者很好的实践练习。通过这些题目,我们可以提升逻辑思维能力,理解递归、循环、条件判断等核心概念,并且熟悉如何利用JAVA进行算法实现。这些技能对于成为一名优秀的JAVA程序员至关重要。