2014-09-12 4 views
-1

УчитываяЭффективно вычислить функцию

f(n) = 1+x+x^2+x^3+……+x^n, (n >=0 && n is a integer) 

вход х, п, как мы можем работать на результат с большей эффективностью?

+2

Этот вопрос должен быть опубликован при просмотре кода – JamesENL

+0

Вы хотите сказать, что этот вопрос не должен быть помечен как алгоритм? – Michael

+0

Нет, я имею в виду, что это не сломанный фрагмент кода, который вы хотите исправить, это рабочий фрагмент кода, который вы хотите улучшить. – JamesENL

ответ

5

Это geometric progression. Отмечая, что

(x-1)f(n) = x^{n+1}-1 

вы получите

f(n)=(x^{n+1}-1)/(x-1). 
+0

За исключением того, что когда 'x = 1', ответ должен быть' f (n) = n' (вместо '0/0'). – Pang

+2

@Pang 'f (n) = n + 1' когда' x = 1' – hk6279

+0

@ hk6279 А, правильно, я пропустил первый срок! – Pang

0
public class Test { 

    public static void main(String args[]) { 
     int x = 2, n = 10; 
     Double sum = new Double(0); 
     for (int i = 0 ; i <= n ; i++) { 
      sum = sum + Math.pow(x, i); 
     } 
     System.out.println(sum); 
    } 
} 
1

Это делает n размножается и n приращения. Легко поместить сумму в закрытую форму, но вычисление закрытой формы требует оценки xn+1, что также может закончиться тем, что n умножает, но не требует разделения.

Хотя это действительно действительный C, подумайте об этом как псевдокоде. Реальная реализация проверила бы отрицательный n, а не зацикливала бы половину номера int. Если вам нужно применить это к целому числу x, а не к плавающей запятой x, это определенно будет путем.

double polysum(int n, double x) { 
    double a = 1; 
    while (n--) a = x * a + 1; 
    return a; 
} 
+0

Я переместил свой вопрос [здесь] (http://codereview.stackexchange.com/questions/62716/effectively-calculate-the-result-of-geometric-series). Сейчас немного другое, пожалуйста, взгляните. Спасибо всем. @ Rici, @ Pang, @ ankur-singhal, @ Джеймс Мэсси – Michael