如何用递归函数无循环返回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
相关产品推荐
相关产品推荐

