Java 生成斐波那契数列:for 循环、while 循环与递归实现全解析
什么是斐波那契数列?
斐波那契数列是指每个数等于前两个数之和的数列。Java 中通常以 0 和 1 开始:
0, 1, 1, 2, 3, 5, 8, 13, 21, …
除了数学趣味,斐波那契数列常用于算法分析——如估算递归过程运行时间、计算最大公约数等。
- for 循环实现
- while 循环实现
- 递归实现
- 交互式输入示例
使用 for 循环生成斐波那契数列
// for 循环实现
public class FibonacciForLoop {
public static void main(String[] args) {
int maxNumber = 10; // 项数
int previous = 0;
int current = 1;
System.out.print("前 " + maxNumber + " 项斐波那契数列: ");
for (int i = 1; i <= maxNumber; i++) {
System.out.print(previous + " ");
int next = previous + current;
previous = current;
current = next;
}
}
}
输出:
前 10 项斐波那契数列: 0 1 1 2 3 5 8 13 21 34
核心逻辑:
- 初始化
previous = 0、current = 1。 - 循环
maxNumber次,打印previous并滚动更新两个变量。
使用 while 循环生成斐波那契数列
// while 循环实现
public class FibonacciWhileLoop {
public static void main(String[] args) {
int maxNumber = 10;
int previous = 0;
int current = 1;
System.out.print("前 " + maxNumber + " 项斐波那契数列: ");
int i = 1;
while (i <= maxNumber) {
System.out.print(previous + " ");
int next = previous + current;
previous = current;
current = next;
i++;
}
}
}
输出:
前 10 项斐波那契数列: 0 1 1 2 3 5 8 13 21 34
基于用户输入的斐波那契数列
import java.util.Scanner;
public class FibonacciUserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入项数: ");
int maxNumber = scanner.nextInt();
int previous = 0;
int current = 1;
System.out.print("前 " + maxNumber + " 项斐波那契数列: ");
for (int i = 1; i <= maxNumber; i++) {
System.out.print(previous + " ");
int next = previous + current;
previous = current;
current = next;
}
scanner.close();
}
}
逻辑: 迭代逻辑不变,只是项数由用户输入决定。
使用递归生成斐波那契数列
// 递归实现
public class FibonacciRecursion {
public static int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
public static void main(String[] args) {
int maxNumber = 10;
System.out.print("前 " + maxNumber + " 项斐波那契数列: ");
for (int i = 0; i < maxNumber; i++) {
System.out.print(fibonacci(i) + " ");
}
}
}
输出:
前 10 项斐波那契数列: 0 1 1 2 3 5 8 13 21 34
递归原理:
- 基准情况:
n == 0返回 0;n == 1 || n == 2返回 1。 - 递归情况:
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)。 - 每次调用拆分为两个子调用,完美契合数学定义。
性能提示: 递归写法虽简洁,但对大 n 呈指数级时间复杂度。生产环境建议使用备忘录模式(记忆化)或迭代法。
java
- Java Hello World:你的第一个程序
- Java 变量与字面量:全面指南
- 理解 Java 表达式、语句与代码块
- Java 类与对象:实用指南
- Java 抽象类与抽象方法完全指南
- 精通 Java 嵌套类与内部类:类型、示例与最佳实践
- Java throw 与 throws 深度解析:异常处理实战指南
- 掌握 Java 自动装箱与拆箱:实战示例与最佳实践
- Java 判断素数(质数)的完整指南与代码实现
- Java 判断阿姆斯特朗数(自幂数):for 循环与 while 循环实现
- Java 递归反转字符串:原理、代码实现与性能分析
- Java 回文数判断:while 循环与 for 循环两种算法实现