You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现非递归迭代方案:输出输入数字的两个最近斐波那契数

非递归迭代实现:找到最接近输入数的两个斐波那契数

我来帮你搞定这个问题!其实核心逻辑很简单——迭代生成斐波那契数,同时始终跟踪最近的两个值,直到生成的数超过输入值,再根据输入是否是斐波那契数来输出结果。咱直接上步骤和代码:

核心思路

  1. 边界处理:先搞定输入小于等于1的特殊情况(毕竟斐波那契序列的前几个数是0、1、1、2...)
  2. 迭代跟踪:用三个变量分别记录「前前一个斐波那契数」「前一个斐波那契数」「当前生成的斐波那契数」,每次迭代更新这三个值
  3. 终止条件:当生成的当前数超过输入值时停止循环,此时「前一个数」就是最大的不超过输入的斐波那契数
  4. 结果判断:如果输入值等于「前一个数」,说明它本身是斐波那契数,输出「前前一个数」和它自己;否则输出「前前一个数」和「前一个数」(这俩就是小于输入的最接近的两个)

Java 代码实现

import java.util.Scanner;

public class FibonacciClosest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数字:");
        int inputNum = scanner.nextInt();
        scanner.close();

        // 处理边界情况:输入0或1
        if (inputNum == 0) {
            System.out.println("最接近的两个斐波那契数:不存在有效数(小于0的斐波那契数不存在)");
            return;
        }
        if (inputNum == 1) {
            System.out.println("最接近的两个斐波那契数:0 和 1");
            return;
        }

        // 初始化斐波那契数的三个跟踪变量
        int prevPrev = 0; // 前前一个数,初始为斐波那契第0项
        int prev = 1;     // 前一个数,初始为斐波那契第1项
        int current = 1;  // 当前数,初始为斐波那契第2项

        // 迭代生成斐波那契数,直到当前数超过输入值
        while (current <= inputNum) {
            prevPrev = prev;   // 更新前前一个数为之前的前一个数
            prev = current;    // 更新前一个数为之前的当前数
            current = prevPrev + prev; // 生成下一个斐波那契数
        }

        // 判断输入是否是斐波那契数并输出结果
        if (prev == inputNum) {
            System.out.printf("最接近的两个斐波那契数:%d 和 %d\n", prevPrev, prev);
        } else {
            System.out.printf("最接近的两个斐波那契数:%d 和 %d\n", prevPrev, prev);
        }
    }
}

代码说明

  • 空间效率高:不用存储整个斐波那契序列,只靠三个变量跟踪,空间复杂度是O(1)
  • 迭代安全:避免了递归可能导致的栈溢出问题,适合处理很大的输入值
  • 逻辑清晰:循环终止时,prev是最后一个不超过输入的斐波那契数,prevPrev是它的前一项,刚好符合需求

测试示例

  • 输入10:输出 5 和 8(两个小于10的最接近斐波那契数)
  • 输入13:输出 8 和 13(13本身是斐波那契数,所以输出前一项和自身)
  • 输入7:输出 3 和 5(两个小于7的最接近斐波那契数)

内容的提问来源于stack exchange,提问作者Itored

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:15:44