Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中改进的Fibonacci_Java - Fatal编程技术网

Java中改进的Fibonacci

Java中改进的Fibonacci,java,Java,系列的定义方式如下: 给定第n项和第(n+1)项,(n+2)项可通过以下关系计算:, 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;

系列的定义方式如下:

给定第n项和第(n+1)项,(n+2)项可通过以下关系计算:, 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));

    }
公共静态长fibonacciModified(inta,intb,intn){
long[]arr=新长[n];
arr[0]=a;
arr[1]=b;
for(int i=2;i

这段代码中的逻辑错误可能是什么,因为它没有通过大多数测试用例。我没有访问测试用例的权限。非常感谢您的帮助。

这里有一种方法可以直接在O(1)中获得N个Fibocanni数

执行主任(1)


快乐编码

使用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);
        }
    }

请说得更具体些;是否有错误消息?到底是什么不起作用?你的意思是问题描述中的Tn+2=(Tn+1)^2+Tn吗?我建议先生成你自己的测试用例。此外,如果您有权访问程序的输出,则可以跟踪您获得的输入。for(int i=2;i 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); } }