[파이썬] recursion(재귀)와 메모화의 중요성

2025. 2. 8. 00:23·[파이썬]
728x90

함수의 활용

재귀함수

재귀(recursion)은 **‘자기 자신을 호출하는 것’**을 의미함

재귀함수로 factorial 연산을 하는 예제

def factorial(n):
    if n==0:
        return 1
    else:
        return n*factorial(n-1)

재귀함수의 문제

재귀함수의 경우 한번 구했던 값을 계속 구해야하기 때문에 계산이 기하급수적으로 늘어나는 특성을 지니고 있다

e.g. factorial(5)

 5*factorial(4) → 5*4*factorial(3) → factorial(3)을 한번 계산함

      4*factorial(3) → 근데 여기서 또해야됨

     …..1*factorial(0) → 결론적으로 factorial(0)은 매 계산마다 다시 계산되야함

메모화

같은 값이 여러번 계산되는게 문제라면 한 번 계산한 값은 다시 계산할 필요가 없도록 메모해두면 된다

counter=0
def fibonacci(n):
    global counter
    counter+=1
    if n == 1:
        return 1
    elif n == 2:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(10),counter)

counter=0
dict={1:1,2:1}
def fibonacci_memo(n):
    global counter
    counter+=1
    if n in dict:
        return dict[n]
    else:
        dict[n] = fibonacci_memo(n-1) + fibonacci_memo(n-2)
        return dict[n]

print(fibonacci_memo(10),counter)

#result
55 109
55 17

조기 리턴

return 키워드를 중간에 사용하는 것으로 함수가 더 이상 작동할 필요가 없을 때 빠르게 종료시키기 위해 사용함

리스트 평탄화 예제

li = [[1,2,3],[4,[5,6]],7,[8,9]]

def flat(data):
    output=[]
    for i in data:
        if type(i) == list:
            output += flat(i)
        else:
            output.append(i)
    return output
    print(output)

flat(li)

#result
[1,2,3,4,5,6,7,8,9]

파이썬 튜터를 적극 활용할 것

728x90

'[파이썬]' 카테고리의 다른 글

[파이썬] 파이썬에서 파일 작업하기 (기초)  (0) 2025.02.08
[파이썬] 튜플과 람다  (0) 2025.02.08
[파이썬] 파이썬 함수와 매개변수  (0) 2025.02.08
[파이썬] for 반복, while 반복과 딕셔너리, 그리고 iterable & iterator  (0) 2025.02.06
[파이썬] if & else & elif 구문과 이에 사용되는 비교 연산자들  (0) 2025.02.06
'[파이썬]' 카테고리의 다른 글
  • [파이썬] 파이썬에서 파일 작업하기 (기초)
  • [파이썬] 튜플과 람다
  • [파이썬] 파이썬 함수와 매개변수
  • [파이썬] for 반복, while 반복과 딕셔너리, 그리고 iterable & iterator
뽕규의 스케치북
뽕규의 스케치북
공부 열심히 해볼게요
  • 뽕규의 스케치북
    뽕규의 스케치북
    뽕규의 스케치북
  • 전체
    오늘
    어제
  • 링크

    • 파이썬 공식 문서
    • GitHub
    • 분류 전체보기 (37)
      • [파이썬] (17)
      • [데이터 분석] (3)
      • [Git&GitHub] (5)
      • [자료구조 & 알고리즘] (3)
      • [안드로이드 앱] (0)
      • [네트워크] (0)
      • [머신러닝 & 딥러닝] (0)
      • [SQL] (1)
      • [컴퓨터 구조 & 운영체제] (0)
      • [개발자 수학] (0)
      • [노션] (6)
      • [기타] (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    GIT
    깃허브
    수식
    *
    소스트리
    python
    push
    파이썬
    TODO
    기초
    발전
    깃
    함수
    pull
    공부
    개념
    노션
    DB
    github
    sourcetree
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
뽕규의 스케치북
[파이썬] recursion(재귀)와 메모화의 중요성
상단으로

티스토리툴바