斐波那契前n项可用循环实现,时间复杂度o(n)、空间复杂度o(1):初始化prev2=0、prev1=1,从i=2循环至n-1,每次curr=prev1+prev2并滚动更新;需单独处理n=0、n=1边界,注意起始项和整数溢出。

用循环计算斐波那契数列前 n 项,核心是避免递归带来的重复计算,时间复杂度控制在 O(n),空间复杂度可低至 O(1)(只存前两项)。
基本思路:用两个变量滚动更新
斐波那契定义是:F(0)=0, F(1)=1,之后每一项都等于前两项之和(F(i) = F(i−1) + F(i−2))。循环时不需要保存整个数组,只需记住最近的两个值:
- 初始化 prev2 = 0(F₀),prev1 = 1(F₁)
- 从第 2 项(即 i=2)开始循环到 n−1,每次算出 curr = prev1 + prev2
- 然后更新:prev2 = prev1,prev1 = curr
输出前 n 项的完整代码示例
以下 Java 方法打印或返回前 n 项(含 F₀):
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
public static void printFibonacci(int n) {
if (n = 1) System.out.print("0");
if (n >= 2) System.out.print(", 1");
long prev2 = 0, prev1 = 1;
for (int i = 2; i
注意:当 n 较大时(如 > 92),long 也会溢出,如需更大范围可用 BigInteger。
如果需要返回数组(便于后续使用)
可以分配长度为 n 的数组,按索引依次填入:
- 若 n == 1,只设 fib[0] = 0
- 若 n >= 2,设 fib[0]=0、fib[1]=1,再从 i=2 开始循环填充
- 这样能直接通过下标访问任意项,适合多次查询场景
常见易错点提醒
初学者常忽略边界情况:
- n=0 或 n=1 时不能直接进主循环,要单独处理
- 误把“前 n 项”理解成从 F₁ 开始(实际通常包含 F₀),确认题目是否要求从 0 还是 1 起始
- 用 int 存储时,第 47 项就溢出,建议根据 n 的范围选合适类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










