Java中修改过的Fibonacci

时间:2016-02-18 14:39:02

标签: java

系列按以下方式定义:

给定第n和第(n + 1)项,第(n + 2)th可以通过以下关系计算, Tn + 2 =(Tn + 1)2 + Tn 给定三个整数A,B和N,使得系列的前两个项(第一和第二项)分别为A和B,计算该系列的第N项。

这是我的代码,

public static long fibonacciModified(int a, int b, int n){

        long[] arr = new long[n];
        arr[0] = a;
        arr[1] = b;
        for(int i = 2; i< n; i++){
          arr[i] = (long)(Math.pow(arr[i-1], 2) + arr[i-2]);  
        }
        return arr[n-1];
    }

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] strArray = str.split(" ");
        int a = Integer.parseInt(strArray[0]);
        int b = Integer.parseInt(strArray[1]);
        int n = Integer.parseInt(strArray[2]);
        System.out.println(fibonacciModified(a, b, n));

    }

这段代码中可能存在逻辑错误,因为它没有通过大多数测试用例。我无法访问测试用例。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

有一种方法可以直接在O(1)

中获得Nth Fibocanni数字
System.out.println((1/Math.sqrt(5))*(Math.pow(((1+Math.sqrt(5))/2),3)-Math.pow(((1-Math.sqrt(5))/2),3)));

表现O(1)

快乐编码

答案 1 :(得分:0)

使用BigInteger,因为您的测试用例未知。这里只是使用静态示例。始终涵盖代码挑战中的所有情况,例如n = 1或n = 2,因为您需要返回a和b。将n-2传递给方法,因为第一次运行的前两个元素将计算第三个元素,所以整体运行n-2次。因此,当n为0时,我们结束递归。

    int a = 1;
    int b = 1;
    int n = 4;
    BigInteger result;
    if (n == 1) {
        result = BigInteger.valueOf(a);
    } else if (n == 2) {
        result = BigInteger.valueOf(b);
    } else {
        result = fibonacciModified(BigInteger.valueOf(a), BigInteger.valueOf(b), n - 2);
    }
    System.out.println(result);


 public static BigInteger fibonacciModified(BigInteger a, BigInteger b, int n) {
        if (n == 0) {
            return b;
        } else {
            return fibonacciModified(b, ((a.add(BigInteger.ONE)).pow(2)).add(b), n - 1);
        }
    }