2015-01-28 3 views
-1

목록의 개념을 파악하려고하는데, 이것은 저에게 새로운 것입니다. 배열만을 사용하여 알고리즘을 해결합니다. 숫자 목록의 합계를 계산하려면이 코드가 실제로 무엇을합니까?숫자 목록 합계 계산하기

의사 코드 :

function listSum(intList:List):Integer 
if isEmpty(rest(intList)) then 
       listSum:=first(intList) 
      else 
       listSum:=first(intList) + listSum(rest(intList)) 
print(listsum([1,3,5,7,9])) 

나는 this explanation를 읽을 수 있지만 나는 여전히 진행 방법을 이해하지 않습니다.

제발 이해시켜 주시겠습니까?

+2

이것은 파이썬 프로그래밍 질문입니까? – talonmies

+0

정확히는 자바에서 알고리즘 코스를 공부하고 있습니다. – keyz

답변

1

최선은 세드릭 줄 단위를 설명하려고합니다 :이 코드는 재귀 적 결과를 찾을 수있는 배열을 전달한다

function listSum(intList:List):Integer 
    if isEmpty(intList) 
     then listSum:=first(intList) 
    else 
     listSum:=first(intList) + listSum(rest(intList)) 

print(listsum([1,3,5,7,9])) 

. 만약 배열 IsEmpty 함수를보고 당신이 함수에 배열을 전달하는 경우

[1,2,3,5] 

, 그것은 확인합니다 :

예를 들어, 다음과 같은 배열을 가지고 있다고 할 수 있습니다.

else 블록으로 이동하지 않습니다.

else 블록은 "이 목록의 첫 번째 항목과 나머지 목록을 반환합니다"라고 말합니다. "나머지 목록"은 배열의 나머지 부분을 listSum 함수에 전달하여 가져옵니다.

[1,2,3,5] 
1 + [2,3,5] 
1 + 2 + [3,5] 
1 + 2 + 3 + [5] 
1 + 2 + 3 + 5 
1 + 2 + 8 
1 + 10 
11 

키 테이크 아웃은 의사가 반복적으로 문제를 해결입니다 : 같은

더 간결 함수 결과를 보일 것이다.

More info on recursion here

+0

첫 번째 요소는 1이고 나머지는 [2,3,5]이므로 다음 재귀 1 + 2 + [3,5]는 어떻게 작동합니까? – keyz

+0

2가 첫 번째 요소가되고 [3,5]가 나머지 요소가됩니까? 등등 ... – keyz

+0

그래서 각각의 추가 반복은'listSum (rest (intList)) '와 함께 호출됩니다. 당신은 의사 코드로 말하고 있지만,'나머지'는 첫 번째 요소를 제외한 모든 요소를 ​​반환한다고 가정합니다. 그건, 다음과 같은 발췌 문장 :'if isEmpty (intList) then listSum : = first (intList)'틀린 것 같습니다. – TheIronDeveloper