Soy nueva en Java y esto es lo que tengo que hacer:

La secuencia es la siguiente: 1, 1, 2, 3, 5, 8, 13, 21, ... Etc.

El siguiente número en la secuencia es la suma del número 2 anterior

Escriba un programa que permita al usuario ingresar un número, n, y luego calcule el enésimo número de la secuencia y la suma de los números en la secuencia.

Por ejemplo, el quinto número es 5 y la suma hasta ese número es 12

Esto no es un duplicado ya que mi pregunta es diferente del resto y mi código también es diferente. Esto es lo que he hecho hasta ahora:

public class fibonnacifinal {

    public static void main(String args[]) {
        System.out.println("Enter number upto which Fibonacci series to print: ");
        int number = new Scanner(System.in).nextInt();
        System.out.println("\n Fibonacci number at location " + number + " is ==> " + (fibonacciLoop(number) + ""));
    }

    public static int fibonacciLoop(int number) {
        if (number == 1 || number == 2) {
            return 1;
        }

        int fibo1 = 1, fibo2 = 1, fibonacci = 1;
        for (int i = 3; i <= number; i++) {
            fibonacci = fibo1 + fibo2; // Fibonacci number is sum of previous two Fibonacci number
            fibo1 = fibo2;
            fibo2 = fibonacci; 
        }
        return fibonacci; // Fibonacci number
    }
}

El problema que tengo es que no puedo obtener los números para agregar e imprimir. Por ejemplo, si el usuario ingresa 7, puedo hacer que diga que el séptimo número es 13, pero no puedo hacer que imprima esa suma hasta que ese número sea 33.

1
John Smith 23 dic. 2016 a las 02:02

3 respuestas

La mejor respuesta

Al comenzar desde i = 3, puede usar lo siguiente dentro de su fibonacciLoop(int number):

int sum = 2;
for (int i = 3; i <= number; i++) {
    fibonacci = fibo1 + fibo2; 
    fibo1 = fibo2;
    fibo2 = fibonacci;
    sum = sum + fibonacci;
}
System.out.println("Sum: " +sum); //print before return fibonacci

Tenga en cuenta que pronto int sum se desbordará para un gran número de fibonacci.

¡Aquí es un código funcional completo para usted!

2
rakeb.mazharul 22 dic. 2016 a las 23:21

Ya devuelve el número de Fibonacci.

Si desea devolver ambos: número de Fibonacci + la suma, debe cambiar el tipo de método a un par.

Si solo desea imprimir la suma, agregue las siguientes líneas en ese método:

public static int fibonacciLoop(int number) {
    int sum = 0;
    if (number == 1) { // 1
        System.out.println("1");
    } else if (number == 2) { // 1, 1
        System.out.println("2");
    } else {
        sum = 2;
    }
    ...
    for (int i = 3; i <= number; i++) {
        ...
        sum += fibonacci;
    }
    System.out.println(sum);
    ...
}
1
ROMANIA_engineer 22 dic. 2016 a las 23:16

Solo necesitas sumar el resultado de cada fibonacci

    public class Fibonnacifinal {
        public static void main(String args[]) {
            System.out
                    .println("Enter number upto which Fibonacci series to print: ");
            int number = new Scanner(System.in).nextInt();
            System.out.println("\n Sum of Fibonacci numbers at location " + number
                    + " is ==> " + (fibonacciLoop(number) + ""));
        }

        public static int fibonacciLoop(int number) {
            // Fib(1) = 1, returns 1
            // Fib(2) = 2, returns 2 which is the sum of Fib(1) + Fib(1)
            if (number < 3) {
                return number;
            }

            int sum = 2; // 2 is the sum till Fib(2)
            int fibo1 = 1, fibo2 = 1, fibonacci = 1;
            for (int i = 3; i <= number; i++) {
                fibonacci = fibo1 + fibo2;
                sum += fibonacci;
                fibo1 = fibo2;
                fibo2 = fibonacci;
            }

            return sum;
        }

    }
1
Michael Karam 22 dic. 2016 a las 23:23