2017-12-29 7 views
-1

파이썬에서 재귀 함수와 관련된 몇 가지 문제점을 이해하는 데 어려움이 있습니다 (일반적으로 생각합니다). 나는 해답을 찾고자했지만 어떻게 찾지 못했습니다.파이썬에서 재귀 함수에 대한 반환 값

내가 검색 할 때 가장 일반적인 재귀 함수의 예를 촬영 :

def sfactorr(j): 
    if j == 1: 
     return 1 
    else: 
     return j * sfactorr(j-1) 

함수가 1보다 클 때마다, 그것은 일본의 == 1까지 다시 시작하지만 1 안타 때 아닌해야 반환 값은 1입니까? 분명히 그것을 실행할 때 전체 기능의 결과를 얻지 만 그 이유를 완전히 이해하지 못하는 것 같습니다.

즉, 기본 조건이 반환하는 것이 아니라 올바른 값을 반환하는 방법은 무엇입니까?

감사합니다.

+1

'sfactorr (2)'을 수동으로 단계별로 평가 해보십시오. – jwodder

+1

반환 값은'j == 1'을 눌렀을 때'1'이지만,'j'에 의해 곱하는'else'보다주의하십시오. 어제 (Java의 경우, 일반적인 아이디어는 그대로입니다.) https://youtu.be/ozmE8G6YKww – BorrajaX

+1

'함수가 1보다 커질 때마다 j ==가 될 때까지 다시 시작하는 비디오 자습서가 있습니다. 1.''는 실제로 일어나지 않습니다''함수가 1과 다를 때마다 j == 1이 될 때까지 다시 시작됩니다. ' –

답변

1

단계를 수행해야합니다.

우리는 함수에 3을 전달한다고 가정 해보십시오.

함수가 처음 실행될 때 j> 1입니다. 따라서 1을 반환하는 대신 j * [j보다 작은 함수로 호출 된 함수)를 반환합니다. 하지만 호출 한 함수가 반환 될 때까지는 실제로 반환 할 수 없습니다.

j가 1이 될 때까지 계속합니다. 기본 조건입니다. j가 1 일 때 1은 그 위에있는 함수로 반환됩니다.

So. J의 == 3 시작 :

(1) j == 3, returning j * the result of (2) 
(2) j ==2, returning j * the result of (3) 
(3) j == 1, returning 1 

가 그래서 기능은 (1), (2), (3), 그러나 순서대로 반환 순서로 호출된다 (3), (2), (1).

(3) returns 1 
(2) takes the 1 from (1) and multiplies it by (2), resulting in 2. Then it returns that. 
(1) takes the 2 from (2) and multiplies it by 3, resulting in 6. It returns that as a final value. 

재귀 문은 함수가 모두 마지막 문만 실행되는 것이 아니라 스스로 축소되는 것을 의미합니다.

+0

나는 이것을 지워 줘서 고마워. 나가 그것을 걸기 전까지 나는 조금 앞서서 연습 할 것이다. – rammpeth