Java斐波那契数列代码输出错误问题求助
问题分析与修复
你的代码问题出在循环执行的次数上,和你对斐波那契数列项数的定义不匹配:
你定义的数列是:第1项=0,第2项=1,第3项=1,第4项=2,...,第7项=8。但当前的循环从i=1到i<=n会执行n次,相当于把数列往后多推了一项:
- 输入1时,循环执行1次,最终输出的是你定义的第2项1
- 输入7时,循环执行7次,最终输出的是你定义的第8项13
修复方案1:调整循环终止条件
把循环条件从i <= n改成i < n,让循环执行n-1次,刚好对应到你要的第n项:
Scanner input = new Scanner(System.in); System.out.print("In: "); int n = input.nextInt(); int x = 0; int y = 1; int a; for (int i = 1; i < n; i++) { // 修改循环终止条件 a = x + y; x = y; y = a; } System.out.print(x + " ");
验证:
- 输入1:循环不执行,直接输出x=0(符合预期)
- 输入7:循环执行6次,最终x=8(符合预期)
修复方案2:调整循环起始值(逻辑更直观)
如果觉得循环次数不好理解,可以单独处理n=1的情况,然后从第2项开始迭代,每一次循环对应计算下一项:
Scanner input = new Scanner(System.in); System.out.print("In: "); int n = input.nextInt(); if (n == 1) { System.out.println(0); return; } int x = 0; int y = 1; int a; for (int i = 2; i <= n; i++) { // 从第2项开始计算 a = x + y; x = y; y = a; } System.out.print(x + " ");
这个方案的逻辑更贴合项数的定义,不容易出错。
内容的提问来源于stack exchange,提问作者Johannes
相关产品推荐
相关产品推荐

