ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ProgrammingLanguages : Question : 2
    Computer Science/etc 2020. 6. 15. 16:11
    728x90

    1.      

    아래 코드에서 보인 for while 반복문은 완벽하게 똑같이 동작하지는 않는다. 일치하지 않는 예를 보인다.

    (힌트: continue 사용 부분을 생각해볼 것)

     

    1) for

    loop의 반복횟수가 시작 전에 정해지고, 그 횟수의 변함이 없으므로, enumeration-controlled loop의 성격을 띈다. 

    따라서 continue에 의해 i값이 짝수일 경우를 제외한 나머지 경우의 I값이 출력된다. 

     

     

    2) while

    loop의 반복횟수가 정해지지 않았으므로, logically controlled loop의 성격을 띈다. 

    또한 i=0인 상태에서 if문의 continue에 의해 i값은 증가되지 못한 채 while loop에 갇히게 된다. 

    따라서 i값을 출력할 수 없다.


    2.     

    일반적인 recursion에 비해 tail-recursion의 장점이 무엇인지 설명하시오. 

     

    recursion tail recursion을 비교하기에 앞서 recursion iteration을 설명하자면 다음과 같다.

    recursion은 순환 또는 재귀함수를 뜻한다. 함수를 정의할 때 자기 자신을 재참조하는 것을 말한다. iteration recursion을 사용하지 않은 단순 반복문을 말한다. 일반적으로 recursion은 함수를 계속적으로 호출해야 하기 때문에 iteration보다 더 느리다. 하지만  구현된 recursion iteration보다 유리할 수 있다. 이렇게 잘 구현된 recursion tail-recursion이라고 한다. 

    tail-recursion을 구현하기 위해서는 하위 function return 값이 상위 function return 값이어야 하고, recursion의 내부를 iteration하게 구현한다. 이러한 이유 때문에, tail-recursion에서 결과값은 그대로 return 되므로, recursion에 대한 추가적인 연산이 불필요하다. 추가적인 연산의 불필요함은 곧, recursion 이후의 시점에 해당 함수의 context를 더 이상 참조하지 않음을 의미한다. 이는 다시말해, 새로 생성할 context는 현재의 context와 동일하다는 뜻이다. 이로 인해, 기준 recursion stack의 생성과 파괴에 따른 메모리 및 성능의 낭비를 tail-recursion을 통해 방지할 수 있다.

     

    728x90

    댓글

kxmjhwn@gmail.com