이 영역을 누르면 첫 페이지로 이동
와이즈레코드 블로그의 첫 페이지로 이동

와이즈레코드

페이지 맨 위로 올라가기

[자료구조] 순환(recursion) / 반복(iteration)

와이즈레코드

[자료구조] 순환(recursion) / 반복(iteration)

  • 2023.10.25 00:31
  • ✍🏻배움일지/자료구조

이전 정리글 ↓

 

[자료구조] 5. 포인터(Pointer)

이전 정리글 ↓ [자료구조] 4. 배열의 응용 : 다항식 이전 정리글 ↓ [자료구조] 3. C언어 배열과 구조체글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 이전 정리글 ↓ [자료구조] 2. 자료

w8err.tistory.com

 

이번엔 순환에 대해 알아보자.

순환이란,

어떤 알고리즘&함수가 자기 자신을 호출해 계~속 순환하여 문제를 해결하는 프로그래밍 기법 중 하나다. 

재귀함수라고 부르기도 한다.

 

코드로 한번 알아보자.

int factorial_재귀함수(int n) {
printf("팩토리얼 %d\n", n);
if (n <= 1) return(1);
else return (n * factorial_재귀함수(n - 1));
} // 재귀함수.

 

위의 예시는 팩토리얼을 구하는 재귀함수다.

만약 int n에 3이 들어간다면?

 

1. 3은 1이 아니니 else문으로 이동

2. 3 * factorial_재귀함수(2)를 곱한다. 

→ 여기서 factorial_재귀함수(2) 를 계산하러 떠난다.

 

2-1. 2는 1이 아니니 else문으로 이동

2-2. 2 * factorial_재귀함수(1)을 곱한다.

→ 여기서 factorial_재귀함수(1) 을 계산하러 떠난다.

 

3-1. 1 <= 1은 true 이므로 1을 return 한다.

3-2. 전 단계로 돌아간다.

 

4-1. 2 * 1(factorial_재귀함수(1) return 값임) = 2

4-2. 2를 return한다.

 

5-1. 3 * 2(factorial_재귀함수(2) return 값임) = 6

5-2. 6을 return한다.

 

위의 과정을 통하여 결과값은 6이 된다. 읽어보면 생각보다 간단하다. 

식으로 정리해보면, 

factorial(3) = 3 * factorial(2)
                  = 3 * 2 * factorial(1)
                  = 3 * 2 * 1
                  = 6

요런 식으로 동작할 것이다. 

 


순환 ↔ 반복

컴퓨터의 되풀이 방식엔 2가지가 있다. 

 

순환 : 위의 factorial 프로그램처럼 자기자신을 다시 호출하여 문제를 해결하는 방식

반복 : for, while문처럼 전체 코드를 반복하는 방식

 

기본적으로 순환과 반복은 해결능력이 동일하다. 많은 경우 순환↔반복 간의 코드 교체가 가능할 정도로.

 

앞서 구현했던 팩토리얼 계산 프로그램을 반복문으로 바꿔보자.

int factorial_반복함수(int n) {
int i, result = 1;
for (i = 1; i < n; i++)
result = result * i;
return(result);
}

 

팩토리얼 순환구조는 위처럼 반복구조로 바꿔서 만들 수도 있다. 

 

 

728x90
반응형

'✍🏻배움일지 > 자료구조' 카테고리의 다른 글

[자료구조] 수행시간 측정  (6) 2023.11.06
[자료구조] 5. 포인터(Pointer)  (33) 2023.10.23
[자료구조] 4. 배열의 응용 : 다항식  (0) 2023.10.22
[자료구조] 3. C언어 배열과 구조체  (0) 2023.10.22
[자료구조] 2. 자료구조 기본 개념  (2) 2023.10.21

댓글

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [자료구조] 수행시간 측정

    [자료구조] 수행시간 측정

    2023.11.06
  • [자료구조] 5. 포인터(Pointer)

    [자료구조] 5. 포인터(Pointer)

    2023.10.23
  • [자료구조] 4. 배열의 응용 : 다항식

    [자료구조] 4. 배열의 응용 : 다항식

    2023.10.22
  • [자료구조] 3. C언어 배열과 구조체

    [자료구조] 3. C언어 배열과 구조체

    2023.10.22
다른 글 더 둘러보기

정보

와이즈레코드 블로그의 첫 페이지로 이동

와이즈레코드

  • 와이즈레코드의 첫 페이지로 이동

공지사항

  • 공지 - 📢공지글입니다

검색

카테고리

  • 전체 글 (58)
    • 💼 회사일지 (1)
    • 🧑‍💻개발일지 (2)
      • 게임기획 (0)
      • Unity (0)
    • 🎶음악일지 (5)
    • ✍🏻배움일지 (2)
      • 컴퓨터구조 (3)
      • 데이터통신 (8)
      • 자료구조 (7)
    • ⭐리뷰일지 (4)
      • 🎮게임 (2)
      • 🔧IT기기 (1)
    • 🔗공유일지 (7)
    • 🖋️Original (12)
      • 글 (12)
    • 💬Off the Record (4)

메뉴

  • 🏠Home
  • 🐈‍⬛Github
  • ✏️GuestBook
  • 🔧Setting

최근 글

반응형
250x250

정보

w8er의 와이즈레코드

와이즈레코드

w8er

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © w8er.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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