【问题标题】:How to return integer array in Java using recursive function and withouth using loops?如何使用递归函数而不使用循环在Java中返回整数数组?
【发布时间】:2019-01-30 15:01:29
【问题描述】:

我正在尝试连接这个 JavaScript 函数的 Java 等效项:

const fibonacci_nth = (n) => {
    if (n === 0) return 0;
    if (n === 1) return 1;
    else return fibonacci_nth(n-2) + fibonacci_nth(n-1);
}

const fibonacci_series = (n) => {
    if (n === 0) return [fibonacci_nth(0)];
    return [...fibonacci_series(n-1), fibonacci_nth(n)];
}

但我卡住了,因为我不熟悉 Java 语法;

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) {
    int intArray[];
    if(n == 0) return intArray[fibonacci_nth(n)];
    else return intArray[..., fibonacci_series(n-1), fibonacci_nth(n)]; // <- syntax error
}

注意:性能不是我的目标。

【问题讨论】:

  • 你有没有研究过如何在java中创建一个int[]并用值填充它?
  • @f1sh,是的,但所有示例都显示循环。
  • intArray 中的值应该是什么?
  • @c0der,对于fibonacci_series(7),返回值应该是整数数组[ 0, 1, 1, 2, 3, 5, 8, 13 ]。或者返回数组可能是ArrayList,类似的东西。

标签: java recursion fibonacci


【解决方案1】:

你可以使用

public static int[] fibonacci_series(int n) {
    return IntStream.range(0, n+1).map(i->fibonacci_nth(i)).toArray();
}

【讨论】:

    【解决方案2】:

    请在下面找到我在阅读您的帖子时想到的:

    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();                   
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2016-03-10
      • 2017-11-02
      • 2019-06-02
      • 2015-03-09
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多