Пожалуйста, найдите ниже то, что пришло мне в голову, когда я прочитал ваше сообщение:
import java.util.Arrays;
import java.util.stream.IntStream;
public class TestFib {
public static void main(String args[]) {
System.out.println(Arrays.toString(fibonacci_series3(8)));
}
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);
}
//helper method to concatenate two arrays (java doesn't have sth like arr1 + arr2)
public static int[] concatenate(int[] a, int[] b){
int length = a.length + b.length;
int[] result = new int[length];
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
// concatenate the fibonacci_series array of n-1
// with the one element array of fibonacci_nth (n)
public static int[] fibonacci_series(int n) {
if(n == 0)
return new int[]{0};
else{
return concatenate(fibonacci_series(n-1),new int[] {fibonacci_nth(n)});
}
}
// the same as above but using IntStream to simulate sth like
// IntStream.of(fibonacci_nth(0), fibonacci_nth(1), .... fibonacci_nth(n))
public static int[] fibonacci_series2(int n) {
if(n == 0)
return IntStream.of(n).toArray();
else{
return IntStream.of(concatenate(fibonacci_series2(n-1),new int[]{fibonacci_nth(n)})).toArray();
}
}
//no recursion at all, but also using IntStream to map n to nth fibonacci number
public static int[] fibonacci_series3(int n) {
return IntStream.range(0, n+1).map(i->fibonacci_nth(i)).toArray();
}
}