### JAVA经典算法解析 #### 程序1:斐波那契数列 **题目**:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? **代码实现**: ```java public class Exp2 { public static void main(String[] args) { int i = 0; for (i = 1; i <= 20; i++) { System.out.println(f(i)); } } public static int f(int x) { if (x == 1 || x == 2) { return 1; } else { return f(x - 1) + f(x - 2); } } } ``` **知识点说明**: - **斐波那契数列**:是一个著名的数列,每一项都是前两项之和,通常定义为F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2)。 - **递归方法**:上面的代码使用了递归的方式来计算斐波那契数列的第n项。递归是一种函数调用自身的编程技术,在解决这类序列问题时非常有效。 - **性能考虑**:虽然递归方法简洁明了,但对于较大的数值计算效率较低。可以采用迭代或其他优化方法提高性能。 #### 素数判断 **题目**:判断101-200之间有多少个素数,并输出所有素数。 **代码实现**: ```java public class Exp2 { public static void main(String[] args) { int i = 0; Math myMath = new Math(); for (i = 101; i <= 200; i++) { if (myMath.isPrime(i)) { System.out.println(i); } } } } class Math { public boolean isPrime(int x) { if (x < 2) { return false; } for (int i = 2; i <= Math.sqrt(x); i++) { if (x % i == 0) { return false; } } return true; } } ``` **知识点说明**: - **素数定义**:只能被1和自身整除的大于1的自然数称为素数(或质数)。 - **判断素数方法**:上述代码采用了较为高效的判断方式,即只检查到√x即可。这是因为如果x不是素数,则它必有一个小于等于√x的因子。 - **性能优化**:使用`Math.sqrt(x)`可以减少循环次数,提高效率。 #### 水仙花数 **题目**:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 **代码实现**: ```java public class Exp2 { public static void main(String[] args) { int i = 0; Math myMath = new Math(); for (i = 100; i <= 999; i++) { if (myMath.isNarcissistic(i)) { System.out.println(i); } } } } class Math { public boolean isNarcissistic(int x) { int hundred = x / 100; int ten = (x % 100) / 10; int unit = x % 10; if (x == Math.pow(hundred, 3) + Math.pow(ten, 3) + Math.pow(unit, 3)) { return true; } else { return false; } } } ``` **知识点说明**: - **水仙花数定义**:水仙花数是一个三位数,它的每个位上的数字的立方和等于它本身。 - **分解数字**:通过除法和取模运算来获取数字的各个位数。 - **性能考虑**:由于水仙花数仅限于三位数,因此这种遍历方法足够高效。 #### 正整数分解质因数 **题目**:将一个正整数分解质因数。例如:输入90, 打印出90=2*3*3*5。 **代码实现**: ```java public class Exp2 { public void decompose(int n) { for (int i = 2; i <= n; i++) { while (n % i == 0) { System.out.print(i + "*"); n /= i; } } System.out.println(n); } public static void main(String[] args) { Exp2 exp2 = new Exp2(); exp2.decompose(90); } } ``` **知识点说明**: - **质因数分解**:将一个正整数表示为其质因数的乘积形式。 - **分解过程**:从最小的质数2开始尝试,每次找到一个质因数后就将其从原数中去除,直到原数变为1。 - **性能优化**:上述实现中使用了一个while循环来处理每个质因数可能重复出现的情况,这种方法比递归更高效且易于理解。 以上四个经典问题不仅涵盖了基本的数学概念,还涉及到了数据结构和算法的基本思想,对于初学者来说是非常好的实践案例。
































- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 能源信息化管理系统培训讲义.ppt
- “辅导员之家”网站设计与开发毕设论文.doc
- 基于移动网络的防盗系统设计毕业设计论文.doc
- 维Logistic映射研究分析.doc
- 解析水利水电施工企业项目管理论文.doc
- 施工阶段项目管理.ppt
- 基于web办公电子文档设计毕业(论文)设计.doc
- 学习子情境电阻应变式力传感器单片机接口课件.pptx
- 科研事业单位项目管理探讨的论文.doc
- 通信、路灯工程施工方案.doc
- “微生活”网站设计与开发毕业(论文)设计.doc
- 中小企业ERP项目管理实践的分析论文.doc
- 计算机网络广播电视多媒体技术研究论文.doc
- aspose-cells-25.6 for java去水印
- 软件项目监理通用表.doc
- 基于单片机的家电远程控制系统的研究.doc


