系列按以下方式定义:
给定第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));
}
这段代码中可能存在逻辑错误,因为它没有通过大多数测试用例。我无法访问测试用例。任何帮助表示赞赏。
答案 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);
}
}