재귀함수

2022. 10. 27. 19:09·사소한 아이의 소소한 스킬/알고리즘
반응형

재귀함수에 대해 알아보자.

 

재귀함수란 자기 자신을 다시 호출한다는 의미....

 

자기자신을 다시 호출하는데 파라미터를 바꿔가면서 호출한다.

 

여기서 무한정 자기자신을 호출할 수 있기에 종료조건은 필수로 필요하다.

 

그리하여 반복계산할수있도록 하는 것..

 

이렇게만 말하면 헷갈리니..예제 코드를..

 

def factorial(n: int) -> int:
    # 종료조건
    if n <= 1:
        return 1

    return n * factorial(n-1)


print(factorial(4))

Output:
24

 

간단한 팩토리얼 함수이다.

 

파라미터를 int값으로 받는..

 

사용자는 factorial(4)를 원하고 4라는 값이 파라미터로 전달되고

 

factorial 함수 내에서는 종료조건으로 입력받은 파라미터가 1일때 종료. 그 이외에는 또 다시 재귀함수로 n-1값이 들어가는

 

저식을 디버깅 해보면 결국 n값은

 

n = 4 * 3 * 2 * 1의 값이 들어갈 것이다.

 

 

추가로 최댓수를 찾아보는 예제를 알아보자

 

def max(x: int, y: int) -> int:
    if x > y:
        return x
    else:
        return y


def max_array(array: int, len: int) -> int:
    if len == 1:
        return array[0]
    else:
        return max(array[len - 1], max_array(array, len - 1))


temp_array = [33, 44, 5, 66, 139, 390, 45, 23]

print(max_array(temp_array, len(temp_array)))

Output:390

 

재귀함수를 이용하여 배열내에 있는 최대값을 찾는것이다.

 

기존 배열에서 max_array라는 함수와 max라는 함수를 이용하여 가장 큰 값을 비교한다.

 

디버깅을 해보면

 

1:  33과 44를 비교  : 최대값 44

2:  44와 5를 비교 : 최대값 44

3: 44와 66을 비교  : 최대값 66

4: 66과 139를 비교 : 최대값 139

5: 139와 390을 비교 : 최대값 390

 

이런 순서로 값이 계산되어 진다.

 

재귀가 복잡하긴한데..... 잘 사용하면 참 좋고...아니면..괜히 디버깅하기 어려운 함수일수 있기에..사용하기 참 애매한 알고리즘인것 같다.

반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/알고리즘' 카테고리의 다른 글
  • DFS(깊이우선탐색)
  • BFS(너비우선탐색)
  • 알고리즘...
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (951) N
      • 사소한 아이의 소소한 일상 (245)
      • 사소한 아이의 소소한 먹거리 (43)
      • 사소한 아이의 소소한 정보 (75) N
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (53) N
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    뮌헨
    분데스리가
    c#
    러닝
    회사밥
    독일
    WPF
    python
    바이에른 뮌헨
    문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
재귀함수

개인정보

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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