2014-12-06 2 views
0

this answer에 주어진 재귀 함수를 코딩하려고합니다 (불행히도 LaTeX가 없기 때문에 여기에 게시 할 수 없습니다), 파이썬 3.0.파이썬 3.0에서 재귀 함수 코딩하기

나는 코딩에 새로 온 사람이 내 시도 : -

def q(r,b,L): 
    pr = r/(r+b) 
    for k in range(1,L+1): 
     for j in range(1,k): 
      pr = pr * ((r-j)/(r+b-j)) * (b/r+b-j) * q(r-j,b-1,L) 

    f = pr + ((b/(r+b)) * q(r,b-1,L)) 
    return f 

하지만이 Q (3,0,2)에 대한 오류 "0으로 나누기"나에게주고있다. 누구든지 코드를 도와 줄 수 있습니까?

+0

if r <= L: return 1; if b <= 0: return 0; 

:

당신은 같은 검사를 추가해야합니다. 대신 3.4를 사용하십시오. –

+0

고맙습니다. 파이썬 버전을 업데이트하겠습니다. 그러나 나는 이것이 이것이 여기의 문제라고 거의 생각하지 않는다. 이 코드는 어딘가에서 실수를 한 것처럼 보입니다. –

+0

아니, 그게 문제라고 제안하지는 않았다. 루프의 여러 지점과 각 재귀에서 값을보기 위해 일부 인쇄 문을 넣는 것이 좋습니다. –

답변

1

고객님의 답변이 that 답변에 제공된 정확한 번역인지 확신 할 수 없습니다.

def q(r, b, L): 
    s = 0 

    for k in range(1, L+1): 
     p = 1 
     for j in range(0, k): 
      p *= (r - j)/(r + b - j) 

     s += p * b/(r + b - k) * q(r - k, b - 1, L) 

    return b/(r + b) * q(r, b - 1, L) + s 

그러나이 재귀 함수 정의가 기본 케이스 (반복하지 않고 즉, 함수가 하찮게 결과를 생성하는 입력을 의미)을 누락되었습니다

는 뭔가를해야한다는 나에게 보인다.

여기에는 재귀 적 경우 (함수가 자체 호출하는 입력을 의미) 만 있습니다. 파이썬 3.0을 사용하는 좋은 이유가 없습니다 (이 충분하지 않습니다)

+0

고마워요, 제게 많은 도움이되었습니다! :) 다만 관련 질문; r과 b의 값이 클 경우 재귀 횟수가 놀랄만큼 높을 것입니다. 수행 할 수있는 재귀의 수에는 "제한"이 있어야합니다 (최대 스택 크기 용어로 보면 어딘가 읽었을 것입니다, 5000입니다). 이 한도를 어떻게 늘릴 수 있는지 알고 있습니까? –

+1

[sys.setrecursionlimit] (https://docs.python.org/2/library/sys.html#sys.setrecursionlimit)을 호출하여 Python 호출 스택의 최대 깊이를 늘릴 수 있습니다. 또한 http://stackoverflow.com/questions/2917210/python-what-is-the-hard-recursion-limit-for-linux-mac-and-windows 및 http://stackoverflow.com/questions를 살펴보십시오./3323001/최대 재귀 깊이 – manlio