2014-06-09 2 views
1

이 프로그램을 이해하려고 노력하고 있지만 주위를 둘러 볼 수는 없습니다. 아무도 내가 잘못 가고 있다고 제안 할 수 있습니까? 파이썬 스크립트 상기에서 Python 기본 프로그램 이해

def mult(a, b): 
    if b == 0: 
     return 0 
    rest = mult(a, b - 1) 
    value = a + rest 
    return value 

print("3 * 2 = ", mult(3, 2)) 

,

  • 라인 출력 ("3 * 2 ="MULT (3, 2))를 배수 함수가 호출
  • 실행
  • 다중 함수 b == 2이므로 if 조건이 FALSE를 반환합니다.
  • Line rest = Mult (a, b -1)가 다음으로 새 값 (3,1)에 대해 Multfunction을 다시 호출합니다.
  • 그는 다중 함수 b == 1이므로 if 조건 반환 FALSE
  • Line rest = Mult (a, b -1)가 다음으로 새로운 값 (3,0)에 대해 Multfunction을 다시 호출합니다.
  • Mult 함수 b == 0이므로 if 조건 반환 TRUE
  • 값 0은 if 조건에 의해 반환됩니다.
  • "3 * 2 = 0"이 인쇄됩니까?

나는 당신의 의견을 따라 쉽게 당신은 당신의 단계별 목록에서 호출 스택 구축해야 How to read

답변

3

mult(3, 0)에 대한 호출이 에서으로 반환되는 곳을 이해해야합니다. 전화가 print...으로 돌아 오지 않으면 rest = mult(a, b-1) 줄로 돌아갑니다. 그러면 value = a + restvalue의 값이 3 + 0 = 3이됩니다. 그러면 return value 행이 rest = mult(a, b-1)으로 다시 돌아갑니다. return value에 다시 도달하면 인쇄 명령문으로 돌아갑니다.

1

수행 할 수 있도록 함께이를 넣어 다음 b == 0 기능 mult를 마지막으로 호출 된 장소, 즉 rest = ... 라인이 반환되고 print ... 라인은 반환되지 않습니다.

1

사용자가 mult을 반복적으로 사용하고 있고 rest으로 돌아가므로 기능에서 돌아올 때마다 해당 값을 업데이트하게됩니다. 몇 가지 인쇄 문은 무슨 일이 일어나고 있는지 명확히하는 데 도움이 될 수 있습니다.

def mult(a, b): 
    if b == 0: 
     print "b = 0" 
     return 0 
    rest = mult(a, b - 1) 
    value = a + rest 
    print "rest", rest, "value", value 
    return value 

mult(3,2) 

출력

b = 0 
rest 0 value 3 
rest 3 value 6 
6