2015-01-14 2 views
-1

나는 0 문제 6까지있는 번호로 10 번처럼 얻기 위해 가능한 선택의 양을 계산하는 그것이 너무 많은 시간이 소요 것입니다 방법을 사용x는 50 또는 이와 유사합니다. 이 작업을 더 빨리 수행하기 위해해야 ​​할 팁이 필요합니다. 그것은 지난 6 개 값의 합 대신 점을 제외자바 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

일반적으로 프로그램이 오류없이 작동하지만 더 잘 작동하게하려면 *보다 [코드 검토] (http://codereview.stackexchange.com/) 교환에 대한 질문이 더 적합합니다. – azurefrog

+1

재귀를 사용하는 대신 닫힌 양식 수식을 찾으려고 했습니까? count (n-1), ..., count (n-6) 함수 대신에 n의 함수로 count (n)을 표현하려고 시도한 적이 있습니까? 이것은 수학 문제입니다. – 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, oreis A001592] (https://oeis.org/A001592)입니다. 누가 알았습니까? –