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

如何用递归函数无循环返回Java整数数组?求JS斐波那契函数的Java实现

在Java中用递归生成斐波那契数列数组(无循环)

你在Java里遇到的问题主要是因为Java数组是固定长度的,没法像JavaScript那样用扩展运算符...直接拼接数组。咱们一步步来修正你的代码,实现和JS版本等价的功能。

首先你的fibonacci_nth实现是没问题的,先保留:

public static int fibonacci_nth(int n) {
    if(n == 0) return 0;
    if(n == 1) return 1;
    else return fibonacci_nth(n-2) + fibonacci_nth(n-1);
}

接下来是fibonacci_series的实现,核心思路是:

  • 当n=0时,直接返回只包含第0项的数组
  • 当n>0时,先递归获取n-1的数列数组,然后创建一个新数组(长度比原数组多1),把原数组的元素复制进去,再把第n项添加到新数组的末尾

这里我们可以用java.util.Arrays里的copyOf方法来简化数组复制,完整代码如下:

import java.util.Arrays;

public class FibonacciExample {
    public static int fibonacci_nth(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        else return fibonacci_nth(n-2) + fibonacci_nth(n-1);
    }

    public static int[] fibonacci_series(int n) {
        // 基准情况:n=0时返回只包含第0项的数组
        if (n == 0) {
            return new int[]{fibonacci_nth(0)};
        }
        // 递归获取n-1的数列
        int[] prevSeries = fibonacci_series(n-1);
        // 创建新数组,长度比前一个数列多1
        int[] newSeries = Arrays.copyOf(prevSeries, prevSeries.length + 1);
        // 添加当前第n项到新数组末尾
        newSeries[newSeries.length - 1] = fibonacci_nth(n);
        return newSeries;
    }

    // 测试示例
    public static void main(String[] args) {
        int[] result = fibonacci_series(5);
        for(int num : result) {
            System.out.print(num + " ");
        }
        // 输出:0 1 1 2 3 5
    }
}

关键说明:

  • Java数组一旦创建长度就固定,所以每次递归都需要创建新数组来容纳新增的元素,这和JS的动态数组(可以直接push或扩展)是本质区别
  • Arrays.copyOf方法会帮我们把原数组的元素复制到新数组里,新数组的长度是我们指定的prevSeries.length + 1
  • 如果不想用Arrays类,也可以手动循环复制原数组的元素到新数组,不过Arrays.copyOf更简洁高效

这样写出来的代码就和你提供的JavaScript功能完全等价了,而且完全用递归实现,没有使用循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:12:04