2017-07-28 2 views
2

J'essaie de calculer les nombres de fibonacci dans la gamme spécifique (large gamme de nombres en milliers) Je l'ai écrit mais pour je ne sais pas de le modifier pour le faire dans une gamme par exemple que je dois obtenir des numéros de fibonacci entre 5027 et 8386589comment obtenir fibonacci série dans la gamme sans récursion

class Fibonacci 
{ 
    public static void main(String args[]) 
    {  
    int n1=0,n2=1,n3,i,count=10;  
    System.out.print(n1+" "+n2);//printing 0 and 1  

    for(i=2;i<count;++i)  
    {  
     n3=n1+n2;  
     System.out.print(" "+n3);  
     n1=n2;  
     n2=n3;  
    } 
    } 
} 
+1

5027 et 8.386.589 ne sont pas un nombre de fibonacci, de sorte que vous voulez que le plage pour être entre 2 chiffres normaux donnés, oui? – hamena314

+0

Si vous voulez effectuer Fibonacci entre une plage de valeurs et que vous voulez éviter de commencer à partir de 1 ... vous avez besoin au moins des deux premières valeurs de la séquence, sinon vous ne pourrez pas obtenir la valeur suivante. – araknoid

+0

Qu'essayez-vous de sortir? Il suffit d'imprimer les chiffres dans la plage donnée? Ou obtenir une liste des numéros qui sont dans la gamme? Ou les compter? Ou quoi? – Ray

Répondre

2
int fib(int low, int high){ 
     // Initialize first three Fibonacci Numbers 
     int n1 = 0, n2 = 1, n3 = 1; 

     // Count fibonacci numbers in given range 
     int result = 0; 

     while (n1 <= high){ 
      if (n1 >= low) 
       result++; 
      f1 = f2; 
      f2 = f3; 
      f3 = f1 + f2; 
     } 

     return result; 
} 
+0

Cela compte le nombre de fibonacci nombres dans la gamme; est ce que veut OP? "J'ai besoin d'obtenir des nombres de fibonacci entre 5027 et 8386589" est un peu flou. – Ray

+0

Au moins c'est ce que j'ai compris: ') @Ray. – Calips

+0

Merci pour vous qui m'a beaucoup aidé –

0

Essayez d'utiliser une boucle while au lieu d'une boucle et inclure une instruction if

while(n3<8386589){ 
if(n3>5027){ 
    System.out.print(n3+" ");  
} 
n3=n1+n2;  
n1=n2;  
n2=n3; 
} 
+0

maintenant rendre concurrente/parallèle ;-) – user499211

+0

cela a fonctionné correctement avec moi, merci –

0

FWIW, voici ma version (aussi en utilisant une boucle while):

private static void Fibonacci(long lower, long upper) 
    { 
     long curr = 1, prev = 1; 

     while (curr <= upper) 
     { 
      long temp = curr; 

      curr = prev + curr; 

      prev = temp; 

      if (curr >= lower && curr <= upper) 
      { 
       System.out.println(curr); 
      } 
     } 
    } 
+0

Merci beaucoup pour vos efforts, je le comprends clairement maintenant –

0

L'une idée juste en utilisant BigInteger des valeurs plus grandes:

private static BigInteger function_f(int n) { 

    // if n = 0 => f(n) = 0 
    if(n == 0) 
     return new BigInteger("0"); 

    // Initialization of variables 
    // if n = 1 => f(n) = 1 (case included) 
    BigInteger result = new BigInteger("1"); 
    BigInteger last_fn = new BigInteger("0"); 
    BigInteger before_last_fn = new BigInteger("0"); 

    // Do the loop for n > 1 
    for (int i = 2; i <= n; i++) { 

     // f(n - 2) 
     before_last_fn = last_fn; 
     // f(n - 1) 
     last_fn = result; 
     // f(n - 1) + f(n - 2) 
     result = last_fn.add(before_last_fn); 

    } 

    // Return the result 
    return result;  
}