비교 차트
비교 근거 | 재귀 | 되풀이 |
---|---|---|
기본 | 함수 본문의 문은 함수 자체를 호출합니다. | 일련의 명령을 반복적으로 실행할 수 있습니다. |
체재 | 재귀 함수에서는 종료 조건 (기본 경우) 만 지정됩니다. | 반복에는 초기화, 조건, 루프 내의 명령문 실행 및 제어 변수 업데이트 (증가 및 감소)가 포함됩니다. |
종료 | 조건부 문은 함수 호출 본문에 포함되어 재귀 호출을 실행하지 않고 함수를 강제로 반환합니다. | 반복문은 특정 조건에 도달 할 때까지 반복적으로 실행됩니다. |
조건 | 함수가 (기본 케이스)라는 조건에 수렴하지 않으면 무한 재귀가 발생합니다. | 반복문의 제어 조건이 결코 거짓이되지 않으면 무한 반복이 발생합니다. |
무한 반복 | 무한 재귀는 시스템을 충돌시킬 수 있습니다. | 무한 루프는 CPU 사이클을 반복적으로 사용합니다. |
적용된 | 재귀는 항상 함수에 적용됩니다. | 반복은 반복문이나 "반복문"에 적용됩니다. |
스택 | 스택은 함수가 호출 될 때마다 새 로컬 변수와 매개 변수 집합을 저장하는 데 사용됩니다. | 스택을 사용하지 않습니다. |
간접비 | 재귀에는 반복되는 함수 호출의 오버 헤드가 있습니다. | 반복되는 함수 호출의 오버 헤드가 없습니다. |
속도 | 천천히 실행하십시오. | 빠른 실행. |
코드 크기 | 재귀는 코드의 크기를 줄입니다. | 반복은 코드를 더 길게 만든다. |
재귀 정의
C ++은 함수가 코드 내에서 자신을 호출 할 수있게합니다. 이는 함수의 정의가 자신에 대한 함수 호출을 소유 함을 의미합니다. 때로는 " 원형 정의 "라고도합니다. 함수가 사용하는 지역 변수 및 매개 변수 집합은 함수가 자체적으로 호출하고 스택 맨 위에 저장 될 때마다 새로 만들어집니다. 그러나 함수가 자신을 호출 할 때마다 해당 함수의 새 복사본을 만들지 않습니다. 재귀 함수는 코드의 크기를 크게 줄이지 않고 메모리 사용률을 향상시키지 않지만 반복과 비교할 때 일부는 수행합니다.
재귀를 종료하려면 함수의 정의에 select 문을 포함시켜 함수가 자신을 재귀 호출하지 않고 반환하도록해야합니다. 재귀 함수의 정의에 select 문이 없으면 호출 된 무한 재귀 함수가 사용됩니다.
숫자의 계승을 반환 할 함수로 재귀를 이해합시다.
int 계승 (int num) {int answer; if (num == 1) {return 1; } else {응답 = 계승 (num-1) * num; // 재귀 호출} return (answer); }
위의 코드에서 else 부분의 명령문은 해당 명령문이 상주하는 factorial () 함수를 호출하기 때문에 재귀를 보여줍니다.
반복의 정의
반복은 반복문의 조건이 거짓이 될 때까지 반복적으로 명령어 세트를 실행하는 프로세스입니다. 반복문에는 반복문 내부의 명령문 초기화, 비교, 실행 및 마지막으로 제어 변수의 업데이트가 포함됩니다. 제어 변수가 업데이트 된 후 다시 비교되고 반복문의 조건이 거짓이 될 때까지 프로세스가 반복됩니다. 반복문은 for 루프, while 루프, do-while 루프입니다.
반복문은 스택을 사용하여 변수를 저장하지 않습니다. 따라서 반복문에 비해 반복문 실행이 빠릅니다. 반복 함수조차도 반복 함수 호출의 오버 헤드를 가지지 않으므로 재귀 함수보다 빠르게 실행됩니다. 반복은 제어 조건이 거짓이 될 때 종료됩니다. 반복문에 제어 조건이 없으면 무한 루프가 발생하거나 컴파일 오류가 발생할 수 있습니다.
위의 예제에 대한 반복을 이해합시다.
int 계승 (int num) {int answer = 1; // (int t = 1; t> num; t ++) // iteration {answer = answer * (t);}에 대한 초기화 전에 가비지 값을 포함 할 수 있으므로 초기화가 필요합니다. 반환 (대답); }}
위의 코드에서이 함수는 반복문을 사용하여 숫자의 계승을 반환합니다.
재귀와 반복의 주요 차이점
- 재귀는 프로그램의 메소드가 반복적으로 자신을 호출하는 반면, 반복은 프로그램의 명령어 세트가 반복적으로 실행되는 경우입니다.
- 재귀 적 메소드에는 일련의 명령어, 명령문 호출 자체 및 종료 조건이 포함되지만 반복문에는 초기화, 증가, 조건, 루프 내의 명령어 세트 및 제어 변수가 포함됩니다.
- 조건문은 재귀의 종료를 결정하고 변수의 값을 제어하여 반복문의 종료를 결정합니다.
- 메서드가 종료 조건으로 이어지지 않으면 무한 재귀에 들어갑니다. 반면에 제어 변수가 종료 값으로 연결되지 않으면 반복문이 무한 반복됩니다.
- 무한 반복은 시스템 충돌로 이어질 수 있지만 무한 반복은 CPU 사이클을 소모합니다.
- 재귀는 항상 메소드에 적용되는 반면, 반복은 명령어 세트에 적용됩니다.
- 재귀 중에 작성된 변수는 스택에 저장되지만 반복에는 스택이 필요하지 않습니다.
- 재귀 호출은 반복되는 함수 호출의 오버 헤드를 유발하는 반면, 반복에는 오버 헤드를 호출하는 함수가 없습니다.
- 함수 호출로 인해 재귀 실행은 느려지는 반면 반복 실행은 빠릅니다.
- 재귀는 코드의 크기를 줄이지 만 반대로 반복은 코드를 길게 만듭니다.
결론:
재귀 함수는 작성하기 쉽지만 반복에 비해 성능이 뛰어나지 만 반복은 작성하기가 어렵지만 재귀와 비교할 때 성능이 좋습니다.