특정 질문에 답하려면 : 아니요, 언어 학습의 관점에서 재귀는 기능이 아닙니다. 만약 당신의 교수가 정말로 그가 아직 가르치지 않은 "기능"을 사용한다고 표시했다면 그것은 잘못된 것입니다.
줄 사이를 읽으면서, 한 가지 가능성은 재귀를 사용함으로써 그의 과정에 대한 학습 결과로 여겨지는 기능을 사용하지 않았을 것입니다. 예를 들어, 반복을 전혀 사용하지 않았거나 및 for
을 모두 사용 하는 대신 루프 만 사용했을 수 있습니다 . 과제는 특정 작업을 수행하는 능력을 테스트하는 것을 목표로하는 것이 일반적이며,이를 피하면 교수가 해당 기능에 대해 따로 설정 한 점수를 부여 할 수 없습니다. 그러나 그것이 정말로 당신의 잃어버린 점수의 원인이라면, 교수는 이것을 자신의 학습 경험으로 받아 들여야합니다. 특정 학습 결과를 보여주는 것이 과제의 기준 중 하나라면 학생들에게 명확하게 설명해야합니다 .for
while
그렇게 말하면서 반복이 여기서 재귀보다 더 나은 선택이라는 다른 대부분의 의견과 답변에 동의합니다. 몇 가지 이유가 있으며 다른 사람들이 어느 정도 그들에게 접촉했지만 그들이 그 뒤에있는 생각을 완전히 설명했는지 확신 할 수 없습니다.
스택 오버플로
더 분명한 것은 스택 오버플로 오류가 발생할 위험이 있다는 것입니다. 현실적으로, 사용자가 실제로 스택 오버플로를 트리거하기 위해 잘못된 입력을 여러 번 제공해야하기 때문에 작성한 메서드가 실제로 하나로 이어질 가능성은 거의 없습니다.
그러나 명심해야 할 한 가지는 메서드 자체뿐만 아니라 호출 체인에서 더 높거나 낮은 다른 메서드가 스택에 있다는 것입니다. 이 때문에 사용 가능한 스택 공간을 부담없이 차지하는 것은 모든 방법에 대해 매우 무례한 일입니다. 아무도 코드를 작성할 때마다 빈 스택 공간에 대해 계속 걱정할 필요가 없습니다. 다른 코드가 불필요하게 많은 공간을 사용할 위험이 있기 때문입니다.
이것은 추상화라고하는 소프트웨어 설계의보다 일반적인 원칙의 일부입니다. 기본적으로을 (를) 호출 할 때 DoThing()
주의해야 할 것은 Thing이 완료된 것입니다. 어떻게 수행 되는지 에 대한 구현 세부 사항에 대해 걱정할 필요가 없습니다 . 그러나 스택을 탐욕스럽게 사용하면이 원칙이 깨집니다. 모든 코드는 콜 체인의 다른 곳에서 코드에 의해 스택이 얼마나 안전하게 남았는지에 대해 걱정해야하기 때문입니다.
가독성
다른 이유는 가독성입니다. 코드가 바라는 이상은 사람이 읽을 수있는 문서가되는 것입니다. 여기서 각 줄은 자신이하는 일을 간단히 설명합니다. 다음 두 가지 접근 방식을 사용하십시오.
private int getInput() {
int input;
do {
input = promptForInput();
} while (!inputIsValid(input))
return input;
}
대
private int getInput() {
int input = promptForInput();
if(inputIsValid(input)) {
return input;
}
return getInput();
}
예, 둘 다 작동하며 예, 둘 다 이해하기 쉽습니다. 그러나 두 가지 접근 방식을 영어로 어떻게 설명 할 수 있습니까? 나는 그것이 다음과 같을 것이라고 생각합니다.
입력이 유효 할 때까지 입력을 요청한 다음 반환합니다.
대
입력을 요청하고 입력이 유효하면 반환하고, 그렇지 않으면 입력을 받고 그 결과를 대신 반환합니다.
아마도 후자에 대해 약간 덜 투박한 표현을 생각할 수 있지만 항상 첫 번째가 개념적으로 실제로 수행하려는 작업에 대한보다 정확한 설명이 될 것임을 항상 발견 할 것입니다. 이것은 재귀가 항상 가독성 이 낮다 는 것을 의미하지는 않습니다 . 트리 순회와 같이 빛나는 상황의 경우 재귀와 다른 접근 방식 사이에서 동일한 종류의 나란히 분석을 수행 할 수 있으며 재귀가 한 줄씩 더 명확하게 설명하는 코드를 제공한다는 사실을 거의 확실하게 찾을 수 있습니다.
분리해서 두 가지 모두 작은 점입니다. 이것이 실제로 스택 오버플로로 이어질 가능성은 매우 낮으며 가독성 향상은 미미합니다. 그러나 모든 프로그램은 이러한 작은 결정의 모음이 될 것이므로 격리되어 있어도 그다지 중요하지 않더라도 올바른 결정의 원칙을 배우는 것이 중요합니다.