Estoy trabajando en un programa que encuentra números de Fibonacci. La primera versión de la tarea solicitó que se devolviera un tipo de datos largo y ahora tenemos que cambiar nuestra función para devolver BigInteger. No estoy seguro de cómo cambiar mi función para devolver el tipo BigInteger. Esto es lo que tengo:

public static BigInteger fibonacci_Loop(int f) {
    BigInteger previous, current;

    for(int i = 0; i < f; i ++) {
        BigInteger sum = previous.add(current);
        previous = current;
        current = sum;
    }
    return previous;
}

No se ejecutará porque quiere que inicialice anterior y actual y cada vez que lo hago no devuelve los números correctos. No estoy completamente seguro de cómo usar BigInteger y cualquier consejo sería muy apreciado.

0
RJWoods 10 sep. 2018 a las 06:25

4 respuestas

La mejor respuesta

El siguiente código funciona para mí. Inicialice anterior a cero y actual a 1 y ejecute el ciclo de la misma manera. Tenga en cuenta que el ciclo se ejecuta uno menos que el índice de Fibnacci deseado.

public static BigInteger fibonacci_Loop(int f) {
BigInteger previous = BigInteger.ZERO;
BigInteger current = BigInteger.ONE;

for(int i = 0; i < f-1; i ++) {
    BigInteger sum = previous.add(current);
    previous = current;
    current = sum;
}
return previous;

}

3
Mohit Mutha 10 sep. 2018 a las 03:47

Puede usar el constructor que toma una cadena:

BigInteger i = new BigInteger(“0”);

Pero hay constantes siempre que pueda usar:

BigInteger previous = BigInteger.ZERO;
BigInteger current= BigInteger.ONE;
1
Nathan Hughes 10 sep. 2018 a las 03:42

Cuando trabajas con longs, son de tipo primitivo o en caja, por lo que su valor predeterminado es 0 cuando se declara.

Java.math.BigInteger, sin embargo, es un objeto, por lo que debe inicializarlo antes de usarlo.

Cambiar esta línea BigInteger previous, current; a BigInteger previous = new BigInteger("0"), current = new BigInteger("1"); debería solucionarlo.

0
faris 10 sep. 2018 a las 03:40

Regla : en primer lugar, debe inicializar cualquier variable declarada dentro de una función antes de realizar cualquier operación en ella.

cambiar nuestra función para devolver BigInteger

Si solo tiene que devolver BigInteger, entonces solo debería haber cambiado la declaración de devolución de su función anterior con mucho tiempo para

return new BigInteger(previous);

0
Missaka Iddamalgoda 10 sep. 2018 a las 03:52