2015-01-21 2 views
-1

Меня попросили реализовать 2 функции двумя способами.Предполагается, что следующие два метода возвратят 2 похожих результата, но я для меня не могу понять, где я ошибаюсь

Используя формулу:

C(x) = 12 + 8·n - 3·n2 + n3 

Рекурсивный:

C(0) = 12 

C(1) = 18 

C(n) = 2·C(n-1) - C(n-2) for n >= 2 

Мой код:

public static long CaseCFormula(long x) 
{ 
    return (long) (12 + 8 * x - 3 * Math.pow(x, 2) + Math.pow(x, 3)); 
       //12 + 8 * n - 3 *  n^2  +  n^3 
} 

public static long C(long n) 
{ 
    if(n == 0) 
     return 12; 
    else if(n == 1) 
     return 18; 
    else 
     return 2 * C(n - 1) - C(n - 2); 
} 

Я попытался с помощью для цикла, чтобы проверить результаты, когда значение 1 и 2, результаты те же, однако, когда они достигают 3+, они начинают различаться. Предполагается, что эти два метода всегда возвращают то же самое значение, когда один и тот же параметр передается. Однако я не могу понять, где я ошибаюсь. Буду признателен за любые советы.

Заранее благодарим за помощь.

+1

ли две формулы вы даете, порождают одни и те же значения? –

+0

Я использую for-loop для тестирования. Когда параметр для обоих значений равен 1 или 2, генерируются одинаковые значения. Любой параметр, превышающий 2, генерирует 2 разных значения. – afontalv

+0

@ ThorbjørnRavnAndersen Нет, они не являются. Попробуйте вычислить 'C (2)' – alfasin

ответ

1

Эти две формулы не эквивалентны. Попробуйте n = 3:

1.

 
12 + 8(3) - 3(32) + 33 = 36 

2.

 
C(0) = 12 
C(1) = 18 
C(2) = 2C(1) - C(0) = 2*18 - 12 = 24 
C(3) = 2C(2) - C(1) = 2*24 - 18 = 30 
+0

Вот что я хочу ... Мне нужно поговорить с моим профессором завтра, потому что, по-видимому, эти две формулы должны быть эквивалентными, но я просто не понимаю, как это сделать. Спасибо за ваш вклад. – afontalv

+0

@afontalv Без проблем, рад, что я мог бы помочь. – arshajii

Смежные вопросы