-
ProgrammingLanguages : Question : 2Computer Science/etc 2020. 6. 15. 16:11728x90
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'Computer Science > etc' 카테고리의 다른 글
CS : COCO Dataset (0) 2021.04.09 Unix Programming : 명령어 만들기 : 3/3 (0) 2020.06.15 Unix Programming : 명령어 만들기 : 2/3 (0) 2020.06.15 Unix Programming : 명령어 만들기 : 1/3 (0) 2020.06.15 ProgrammingLanguages : Question : 1 (0) 2020.06.15