2015-09-15 4 views
1

J'ai écrit une fonction itérative pour générer résultat pour l'expression:Iteration pour les entiers négatifs

F(n) = 3*F(n-1)+ F(n-2) + n 

public int calculate(int n){ 
     if(n == 0) { 
     return 4; 
     } 
     if(n ==1){ 
      return 2; 
     } 
     else { 
      int f=0; 
      int fOne = 4; 
      int fTwo = 2; 
      for (int i=2;i<=n;i++) { 
       f = 3*fOne + fTwo + i; 
       fTwo = fOne; 
       fOne = f;     
      } 
      return f; 
     } 
} 

Puis-je modifier la fonction pour obtenir le résultat pour les entiers négatifs aussi bien?

+0

simple cas d'essayer avec un nombre négatif n'est-ce pas? – e4c5

+0

sortie devrait seulement être négation de la sortie courant ?? n'est-ce pas? –

Répondre

-1

Si votre méthode n'est pas conçue pour fonctionner avec des valeurs négatives, vous pouvez accuser l'appelant de transmettre une valeur négative. Il suffit de lancer un InvalidParameterException lorsque n est négatif.

public int calculate(int n){ 
    if (n < 0){ 
     throw new InvalidParameterException("Negative parameter"); 
    } 
    //... proceed as usual 
} 
0

Ceci est un problème mathématique simple:

F(n) = 3*F(n-1)+F(n-2)+n 

ainsi

F(n-2) = F(n)-3*F(n-1)-n 

de remplacement n = k+2 et obtenez:

F(k) = F(k+2)-3*F(k+1)-k-2 

Ainsi vous pouvez calculer votre fonction ayant deux suite numéros aussi bien. Voici le code mis à jour:

public int calculate(int n) { 
    if (n == 0) { 
     return 4; 
    } 
    if (n == 1) { 
     return 2; 
    } else if (n < 0) { 
     int f = 0; 
     int fOne = 4; 
     int fTwo = 2; 
     for (int i = -1; i >= n; i--) { 
      f = fTwo - 3 * fOne - i - 2; 
      fTwo = fOne; 
      fOne = f; 
     } 
     return f; 
    } else { 
     int f = 0; 
     int fOne = 4; 
     int fTwo = 2; 
     for (int i = 2; i <= n; i++) { 
      f = 3 * fOne + fTwo + i; 
      fTwo = fOne; 
      fOne = f; 
     } 
     return f; 
    } 
} 

Les résultats de -10 à 9:

-10: 520776 
-9: -157675 
-8: 47743 
-7: -14453 
-6: 4378 
-5: -1324 
-4: 402 
-3: -121 
-2: 37 
-1: -11 
0: 4 
1: 2 
2: 16 
3: 55 
4: 185 
5: 615 
6: 2036 
7: 6730 
8: 22234 
9: 73441 

Vous pouvez facilement vérifier que votre état d'origine est valable pour les nombres négatifs aussi bien. Par exemple

F(0) = 3*F(-1)+F(-2)+0 = 3*(-11)+37+0 = 4