2017-03-13 8 views
1

목표는 카탈로니아 어 숫자를 생성하는 것입니다! 내 코드는 n = 30까지 작동합니다 (자바에서 동일한 알고리즘을 시도했지만 완전히 정확합니다. 그러나 이상한 일이 파이썬에서 발생하면 n = 30 이후 잘못된 숫자가 반환됩니다.) 문제가 있음을 완전히 확신합니다. 에 대해 반올림 아니면 포맷을하지만 자신에 의해 그것을 알아낼 수 없습니다!재귀 파이썬으로 숫자의 시퀀스 생성

def catalan(n): 
if n < 0: 
    return -1 
else: 
    if n == 0: 
     return 1 
    else: 
     c_n = (4*n-2)/(n+1)*catalan(n-1) 
    return int(c_n) 

답변

4

당신은 그 성질에 의해 제한된 정밀도를 가진 부동 소수점 수를 생산 /(n+1)를 사용하여.이 정밀는 충분히 정확하지 않습니다 n> 30과 함께 나타나는 더 큰 숫자.

대신 정수 번호를 사용하는 수식을 사용하십시오. 먼저 곱하기 및 나눗셈을 수행 한 후 정수 나누기 :

c_n = (4*n-2)*catalan(n-1)//(n+1) 

int에 캐스팅 또한 다음 불필요하고 방금 수행 할 수 있습니다

return c_n 

사이드 노트 : 당신이 else을 필요로하지 않는 경우 명령문의 if 부분에 당신 return. 그래서 쓸 수 있습니다 :

def catalan(n): 
    if n < 0: 
     return -1 
    if n == 0: 
     return 1 
    return (4*n-2)*catalan(n-1)//(n+1)