2016-02-18 3 views
-2

Серия определена следующим образом:Модифицированный Фибоначчи в Java

Учитывая, п-й и (п + 1) -й точки, (п + 2) -й может быть вычислена следующим соотношением, Тп + 2 = (Tn + 1) 2 + Tn Для трех целых чисел A, B и N таких, что первые два члена ряда (1-й и 2-й члены) являются 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)); 

    } 

Что может быть логическая ошибка в этом коде, так как он не проходит большинство тестов. У меня нет доступа к тестовым случаям. Любая помощь оценивается.

+1

будьте более конкретным; есть ли сообщение об ошибке? Что именно не работает? Вы имеете в виду Tn + 2 = (Tn + 1)^2 + Tn в описании проблемы? – Codor

+0

Я бы предложил сначала создать свои собственные тестовые примеры. Кроме того, если у вас есть доступ к выходу вашей программы, вы можете отслеживать, какие данные вы получаете. –

+0

для (int i = 2; i CodeIsLife

ответ

0

Существует способ, чтобы получить номер Nth Fibocanni непосредственно в O (1) здесь

System.out.println((1/Math.sqrt(5))*(Math.pow(((1+Math.sqrt(5))/2),3)-Math.pow(((1-Math.sqrt(5))/2),3))); 

вывода (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); 
     } 
    }