2017-10-07 2 views
1

Scheme에서 기본 재귀 함수를 구현하려고하는데이를 올바르게 작성했는지 확인하기 위해 동일한 함수를 작성했습니다. Scheme과 Python 구현은 1에서 7까지의 값에 대해 동일한 답을 반환합니다. 그러나 값은 이후에 발산하기 시작합니다. 왜 이런 일이 일어 났는지 나는 이해할 수 없다.Scheme과 Python에서 구현 된 재귀 방정식의 리턴 값이 다른 이유는 무엇입니까?

# Function to be implemented 
f(n) = n, if n<4 
f(n) = f(n-1) + 2f(n-2) + 3f(n-3) + 4f(n-4), otherwise 

계획

(define (f n) 
    (if (< n 4) 
     n 
     (+ (f (- n 1)) (* 2(f(- n 2))) (* 3(f (- n 3))) (* 4(- n 4))))) 

(f 1) 
(f 2) 
(f 3) 
(f 4) 
(f 5) 
(f 6) 
(f 7) 
(f 8) 
(f 9) 
(f 10) 

1 
2 
3 
10 
26 
63 
157 
377 
900 
2149 

에게

파이썬 (이 숙제입니다하지만이 과제에서 요구되는 질문을하지, 난 그냥이 구현은 다른 값을 반환하는 이유를 이해 할)
def f(n): 
    if n<4: 
     return n 
    else: 
     return f(n-1) + 2*f(n-2) + 3*f(n-3) + 4*f(n-4) 


print (f(1)) 
print (f(2)) 
print (f(3)) 
print (f(4)) 
print (f(5)) 
print (f(6)) 
print (f(7)) 
print (f(8)) 
print (f(9)) 
print (f(10)) 

1 
2 
3 
10 
26 
63 
157 
401 
1008 
2533 

답변

2

스키마 프로그램에서 작성한 글자는 다음과 같습니다.

(* 4(- n 4)) 

그러나 그것은과 같이해야한다 :

(* 4(f (- n 4))) 
+1

그것은 오히려 전체 응답에 비해 코멘트에 오타 질문에 대한 답변을 일반적으로 가장 좋습니다. 이러한 질문은 향후 독자에게 도움이되지 않으므로 시스템은 1 주 정도 지나면 자동으로 제거하려고 시도합니다. 그러나 긍정적 인 채점 응답은 그 과정을 방해합니다. –