2015-09-15 3 views
1

Я написал итерационной функции для генерации результата для выражения:Итерация для отрицательных чисел

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; 
     } 
} 

Могу ли я изменить функцию, чтобы получить результат для отрицательных чисел, а?

+0

простой пример попытки с отрицательным числом не так ли? – e4c5

+0

выход должен быть только отрицанием токового выхода ?? не так ли? –

ответ

-1

Если ваш метод не предназначен для работы с отрицательными значениями, вы можете обвинить вызывающего абонента в передаче отрицательного значения. Просто введите InvalidParameterException, когда n отрицательно.

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

Это простая математическая задача:

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

таким образом

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

Заменитель n = k+2 и получите:

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

Таким образом, вы можете рассчитать функцию, имеющую два последующихномера. Вот обновленный код:

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; 
    } 
} 

Результаты от -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 

Вы можете легко проверить, что оригинал условие для отрицательных чисел, а также. Например,

F(0) = 3*F(-1)+F(-2)+0 = 3*(-11)+37+0 = 4 
Смежные вопросы