본문 바로가기

Python Basic/혼공파

[혼공파] Chapter 05 ②함수의 활용


  • 는 개념 정리
  •  개인적으로 새롭게 알게 된 점 

5-2. 함수의 활용

재귀 함수

  • 재귀 함수란 어떤 함수에서 자신을 다시 호출하여 작업을 수행하는 방식의 함수

팩토리얼을 구하는 방법

  1. 반복문으로 팩토리얼 구하기
  2. 재귀 함수로 팩토리얼 구하기

1. 반복문으로 팩토리얼 구하기

반복문으로 팩토리얼 구하기

2. 재귀 함수로 팩토리얼 구하기

재귀 함수로 팩토리얼 구하기

재귀 함수의 문제

  • 재귀 함수는 상황에 따라서 같은 것을 기하급수적으로 많이 반복함. 

e.g. 피보나치 수열

피보나치 수열
globar counter, 피보나치 수열

  • 트리 내부에 있는 각각의 노드 값을 계산하려면, 덧셈을 한 번 씩 해야 함. 
  • 현재 코드의 재귀 함수는 한 번 구했던 값이라도 처음부터 다시 계산해야 함. 따라서 계산 횟수가 기하급수적으로 늘어남. 
    • 현재 문제는 같은 값을 구하는 연산을 반복하고 있기 때문이고,
    • 따라서 같은 값을 한 번만 계산하도록 코드를 수정.

메모화

메모화 code

  • 딕셔너리를 사용해서 한 번 계산된 값을 저장함 => 이를 메모 (memo) 한다고 표현함. 
  • 딕셔너리에 값이 메모되어 있으면, 처리를 수행하지 않고, 곧바로 메모된 값을 돌려주면서 코드의 속도를 빠르게 만듦. 

 

메모화 output

조기 리턴

  • 과거 프로그래밍을 할 때 변수는 반드시 앞쪽에 몰아서 선언하고, 리턴은 반드시 뒤쪽에서 해야한다는 비공식적인 규칙이 있었으나
  • 현재는 필요할 때 return을 사용하면 된다는 인식이 널리 퍼짐. 

조기 리턴

  • 들여쓰기 단계가 줄기 때문에 코드를 더 쉽게 읽을 수 있음. 이렇게 흐름 중간에 return 키워드를 사용하는 것을 조기 리턴 (early return) 이라고 함. 

좀 더 알아보기 ① 코드에 이름 붙이기

코드의 가독성을 향상시키기 위해

  • 주석이 있는 코드
  • 함수를 활용한 코드

를 활용할 수 있음. 

좀 더 알아보기 코드 유지보수

코드의 유지보수를 원활하게 하기 위해

  • 변수 사용
  • 함수 사용

의 방법을 통하여, 요청 사항 등이 있을 때, 이를 쉽게 반영하여 수정할 수 있음. 

e.g. 

  • 3.14를 숫자로 입력한 상태
def get_circumference(radius):
    return 2 * 3.14 * radius
    
def get_circumference(radius):
    return 3.14 * radius * radius   

 

  • 3.14를 PI라는 변수로 설정한 상태
def get_circumference(radius):
    return 2 * PI * radius
    
def get_circumference(radius):
    return PI * radius * radius   

요청사항으로 3.14를 3.141592로 변경한 경우,

3.14를 PI라는 변수로 설정한 상태에서 유지보수가 훨씬 쉬움.