2015-01-14 3 views
-1

Я использовал метод А, подсчитывает количество возможных вариантов для получения как номер 10 с номерами, которые от 0 до 6. Проблема заключается в том, что он просто занимает слишком много времени, когдаx как 50 или что-то в этом роде. Мне просто нужны советы, что я должен сделать, чтобы сделать это быстрее.Java Оператор IF (повышение эффективности алгоритма)

Код

public static int count(int x) { 
    if (x < 0) { 
     return 0; 
    } 
    if (x == 0) { 
     return 1; 
    } 

    int result = 0; 
    for (int i = 1; i <= 6; i++) { 
     result += count(x - i); 
    } 
    return result; 
} 
+0

Обычно, если ваша программа работает без ошибок, но вы хотите, чтобы она работала * лучше *, ваш вопрос более подходит для обмена [code review] (http://codereview.stackexchange.com/), чем здесь. – azurefrog

+1

Вы пытались найти формулу закрытой формы вместо использования рекурсии? т. е. вы пытались выразить count (n) как функцию n вместо функции count (n-1), ..., count (n-6)? Это математическая проблема. – assylias

+2

Я не понимаю, что он должен делать. – CaffeineToCode

ответ

3

Это вариация на тему Фибоначчи, кроме это сумма последних шести значений вместо этого.

Вы можете использовать простой цикл, который будет быстрее, чем запоминание (первый раз)

public static long count(int x) { 
    long a=0, b=0, c=0, d=0, e=0, f=1; 
    while(x-- > 0) { 
     long sum = a + b + c + d + e + f; 
     a = b; b = c; c = d; d = e; e = f; 
     f = sum; 
    } 
    return f; 
} 

Если вы вызываете этот раз вы можете также сохранить все значения в int диапазоне, который, вероятно, будет менее 30 в первый раз и получить эти значения после этого.

+0

Вам нужно что-то вернуть. –

+0

@pbabcdefp действительно, спасибо. –

+1

Видимо, это [hexanacci, или oeis A001592] (https://oeis.org/A001592) - кто знал. –

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