이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[C] 함수 간 소통 / 재귀

  • 2022.03.22 16:52
  • Programming Language/C
반응형

 

 

소통

 

 

전역변수를 이용하면 함수들 간에 정보를 교환할 수 있다.

 

하지만... 전역변수와 지역변수의 이름이 같을 때는 전역변수에 접근할 수 없고, 어떤 함수가 전역변수에 접근했는지 판단하기 어렵기 때문에 디버깅도 어렵다.

 

그러므로 두 함수 사이에서 소통하는 방법이 합리적이다.

 

지역 변수를 복사해서 건네주고, 또 리턴 값을 돌려받는 방식으로 함수들 간의 소통을 구현할 수 있다.

이 때 리턴할 수 있는 인자는 하나뿐이기에 이 부분에 주의해서 코드를 작성하자.

 

 

 

재귀

 

 

 

알고리즘 문제를 풀 때 분할 정복 방법으로 푸는 경우가 많다.

이 때 자신을 호출하는 재귀함수를 많이 사용한다.

 

속도와 성능 측면에서는 불리하지만, 코드를 간결하게 작성할 수 있을 경우 사용한다.

 

재귀함수는 base case부분과 재귀 호출 부분으로 구성된다.

 

대표적인 예시인 피보나치를 살펴보면..

 

int fibo(int n){
  if(n == 1){
    return 0;
  }

  if(n == 2){
    return 1;
  }

  return fibo(n-1) + fibo(n-2);
}

 

base case와 재귀호출 부분으로 나뉘어진 것을 확인할 수 있다.

 

재귀호출을 과하게 하면 스택 프레임이 초과돼 스택오버플로우 오류가 발생할 수 있으니 조심하자.

 

재귀로 표현하는 경우는 반복문으로도 표현할 수 있다.

가능하긴 하지만.. 매우 힘들어지는 케이스도 있지만 일단은 가능하다. (ex. 트리의 반복문 구현)

 

 

일을 먼저 하고 재귀 호출을 수행하는 재귀를 꼬리 재귀라고 하고,

재귀 호출을 하고 돌아오면서 일을 하는 재귀를 머리 재귀라고 한다.

 

꼬리 재귀가 머리 재귀보다 좀 더 빠르다.

 

 

 

 

 

반응형

'Programming Language > C' 카테고리의 다른 글

[C] 문자열  (0) 2022.03.28
[C] 배열  (0) 2022.03.28
[C] Register / Volatile  (0) 2022.03.22
[C] Scope  (0) 2022.03.22
[C] 스택 프레임  (0) 2022.03.22

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C] 문자열

    [C] 문자열

    2022.03.28
  • [C] 배열

    [C] 배열

    2022.03.28
  • [C] Register / Volatile

    [C] Register / Volatile

    2022.03.22
  • [C] Scope

    [C] Scope

    2022.03.22
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

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

카테고리

  • 분류 전체보기 (678)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (7)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

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

티스토리툴바