[재귀] 재귀란? (반복문 vs 재귀 누가더 성능이좋은가!)

2022. 2. 24. 21:56·과거의 이력/기본개념 (손필기)
목차
  1.  
  2. 재귀(Recursion) 란?
  3.  
  4. 재귀 vs 반복문
  5. 여기까지의 결론 
  6. 재귀는 반복문보다 느리고 성능이 좋지 않다.
  7. 재귀함수를 사용하는 이유
  8. "프로그램에 반복문을 사용하면 프로그램의 성능을 향상시킬 수 있지만,
  9. 재귀를 사용하면 프로그래머의 능력을 향상시킬 수 있다.
  10. 상황에 따라 적적한 방법을 골라 사용해라"

.

재귀

 

재귀(Recursion) 란?

: 재귀함수란 자기 자신을 계속 호출하는 함수를 뜻한다.

 

- 자기 자신을 호출할 수 있기 때문에 반복 연산에 자주 사용된다.

- 모든 재귀함수는 무한재귀가 발생하는것을 방지하기 위해 탈출 조건인 기본단계와 재귀단계로 나누어져 있다.

- 함수가 호출될 때 스택 메모리(stack memory)를 사용하게 되는데,

함수의 스택 call이 반복적으로 이루어지므로 메모리를 많이 차지하며 반복문에 비해 성능이 좋지 않다.

- 메모리가 부족한 상황까지 반복된다면 stack overflow가 발생하며 프로그램이 비정상 종료 된다.

 

 

 

재귀 vs 반복문

 

 

 

 

 

여기까지의 결론 

재귀는 반복문보다 느리고 성능이 좋지 않다.

 

 

 

 

그럼 대체 재귀를 왜 사용하는걸까?...

 

 

 

 

 

재귀함수를 사용하는 이유

 

1. 재귀적 표현이 자연스러운 알고리즘일 경우

- 대표적인 예시로 피보나치 수열 점화식이 있다.

*피보나치 수열 점화식 ( f(n) = f(n-1) + f(n-2) )

결과값을 구하기 위해 함수인자만 변경하고 자기 자신을 다시 호출해야 하는 경우이다.

이럴 경우 알고리즘을 기술한 그대로 코드로 표현할 수 있다.

 

 

2. 변수 사용을 줄여준다.

- 변수가 차지하는 메모리에 대한 부분이 아닌 mutable state (변경 가능한 상태)를 제거하여

프로그램 오류가 발생할 수 있는 가능성을 줄일 수 있다.

함수형 프로그래밍에서 함수를 일급객체 취급하여 인자전달 하는것과 비슷한 맥락인듯 하다.

 

 

3. 가독성

2번 특징에 더하여 재귀는 반복문에 비해 코드량이 적다. 때문에 가독성을 향상시키는 코드를 짤 수 있다.

 

 

 

 

 

 

스택오버플로우의 레이캐드웰의 말을 인용하며 마무리 해본다!

 

 

 

 

"프로그램에 반복문을 사용하면 프로그램의 성능을 향상시킬 수 있지만,

재귀를 사용하면 프로그래머의 능력을 향상시킬 수 있다.

상황에 따라 적적한 방법을 골라 사용해라"

 

 

 

 

 


 

 

 

참고링크 : https://stackoverflow.com/questions/72209/recursion-or-iteration/72694#72694

 

Recursion or Iteration?

Is there a performance hit if we use a loop instead of recursion or vice versa in algorithms where both can serve the same purpose? Eg: Check if the given string is a palindrome. I have seen many

stackoverflow.com

 

 

 

'과거의 이력 > 기본개념 (손필기)' 카테고리의 다른 글

[정렬] 선택정렬 자바스크립트로 로직 구현!  (0) 2022.02.21
[알고리즘] 배열과 연결리스트의 차이? (Array vs Linked List)  (0) 2022.02.19
[빅오표기법] 빅오표기법이란? (Big O notation)  (0) 2022.02.18
[알고리즘] 이진탐색(binary search) 기본개념 + js코드  (0) 2022.02.18
  1.  
  2. 재귀(Recursion) 란?
  3.  
  4. 재귀 vs 반복문
  5. 여기까지의 결론 
  6. 재귀는 반복문보다 느리고 성능이 좋지 않다.
  7. 재귀함수를 사용하는 이유
  8. "프로그램에 반복문을 사용하면 프로그램의 성능을 향상시킬 수 있지만,
  9. 재귀를 사용하면 프로그래머의 능력을 향상시킬 수 있다.
  10. 상황에 따라 적적한 방법을 골라 사용해라"
'과거의 이력/기본개념 (손필기)' 카테고리의 다른 글
  • [정렬] 선택정렬 자바스크립트로 로직 구현!
  • [알고리즘] 배열과 연결리스트의 차이? (Array vs Linked List)
  • [빅오표기법] 빅오표기법이란? (Big O notation)
  • [알고리즘] 이진탐색(binary search) 기본개념 + js코드
정많이 정만이
정많이 정만이
jeongmany
  • 정많이 정만이
    정많이 정만이
    정많이 정만이
  • 전체
    오늘
    어제
    • 분류 전체보기 (80)
      • 과거의 이력 (71)
        • CS (12)
        • 프론트엔드 (4)
        • javascript (21)
        • Vue.js (7)
        • bootstrap (1)
        • [그리드] ag-grid (3)
        • [그리드] vue-grid-layout (1)
        • HTML_CSS (5)
        • NPM (1)
        • [차트]highcharts (0)
        • JAVA (9)
        • 백엔드 (1)
        • 기본개념 (손필기) (5)
        • 프로그래머스 (1)
      • 알고리즘 (6)
      • 통계 (9)
        • 통계지식 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체
    VirtualBox
    bootstrap
    반복문
    ES6
    aggrid
    Webpack
    우분투
    HTML
    vue.js
    버추얼박스
    코딩테스트
    js
    ubuntu
    vue.config.js
    js map
    ag-grid
    java
    CSS
    JavaScript
    vue
    개발자
    알고리즘
    webpack.config.js
    공유메모리
    자바스크립트
    ubuntu설치
    vuejs
    selectbox
    cs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정많이 정만이
[재귀] 재귀란? (반복문 vs 재귀 누가더 성능이좋은가!)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.