deda
Deda의 데이터 디자인
deda
전체 방문자
오늘
어제
  • 분류 전체보기 (121)
    • Python (27)
      • Python 기초 (17)
      • Python 데이터분석 (10)
    • SQL (9)
    • Coding test (54)
      • Python 기초문제 (45)
      • LeetCode (9)
    • BigData (2)
    • ZeroBase (3)
    • UX (0)
    • Business Review (1)
    • 통계 & 수학 (17)
      • 통계학 (14)
      • 수학 (3)
    • 스터디 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • matplotlib
  • 데이터분석가
  • 코딩
  • 프로그래밍
  • 최소공배수
  • 등차수열
  • pandas
  • 제로베이스
  • 파이썬
  • 데이터분석
  • 기초수학
  • 모듈
  • 계산기
  • 통계
  • 데이터엔지니어
  • 네카라쿠배
  • 함수
  • 데이터사이언티스트
  • SQL
  • 팩토리얼
  • BMI
  • 릿코드
  • 군수열
  • 부트캠프
  • 마이데이터
  • 계차수열
  • 등비수열
  • 소인수분해
  • 미니콘다
  • 빅데이터

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
deda

Deda의 데이터 디자인

[파이썬 기초] 알고리즘 - 재귀, 하노이의 탑
Python/Python 기초

[파이썬 기초] 알고리즘 - 재귀, 하노이의 탑

2022. 5. 13. 14:27

🔍  재귀 알고리즘이란?

- 나 자신을 다시 호출하는 알고리즘

 

1) 재귀 알고리즘

def recusion(num):

    if num > 0:
        print("*" * num)
        return recusion(num-1)

    else:
        return 0

recusion(10)


-----------------------------
**********
*********
********
*******
******
*****
****
***
**
*

 

2) 팩토리얼

def factorial(num):
    if num > 0:
        return num * factorial(num-1)
    else:
        return 1

print(f'factorial(4) : {factorial(4)}')


-----------------------------------------
factorial(4) : 24

 

3) 최대 공약수 구하기

def gcd_for(n1, n2):

    maxNum = 0
    for i in range(1, n1+1): #n1까지
        if n1 % i == 0 and n2 % i == 0:
            maxNum = i
    return maxNum

print(f'for문 이용 : {gcd_for(96,40)}')


def gcd_recusion(n1, n2):
    if n1 % n2 == 0:
        return n2
    else:
        return gcd_recusion(n2, n1%n2)

print(f'재귀 이용 : {gcd_recusion(96,40)}')


-----------------------------------------
for문 이용 : 8
재귀 이용 : 8

 

🗝 하노이의 탑

- 3개의 기둥에 적당한 개수의 원반을 쌓아 놓고 다른 쪽으로 옮기는 게임.

하노이의 탑 이동 과정

def moveDisc(discCnt, fromBar, toBar, viaBar):
    if discCnt == 1:
        print(f'{discCnt}disc를 {fromBar}에서 {toBar}(으)로 이동!')
    else:
        moveDisc(discCnt-1, fromBar, viaBar, toBar)

        print(f'{discCnt}disc를 {fromBar}에서 {toBar}(으)로 이동!')

        moveDisc(discCnt-1, viaBar, toBar, fromBar)

moveDisc(3,1,3,2)

---------------------------
1disc를 1에서 3(으)로 이동!
2disc를 1에서 2(으)로 이동!
1disc를 3에서 2(으)로 이동!
3disc를 1에서 3(으)로 이동!
1disc를 2에서 1(으)로 이동!
2disc를 2에서 3(으)로 이동!
1disc를 1에서 3(으)로 이동!

'Python > Python 기초' 카테고리의 다른 글

[파이썬 기초] 알고리즘 - 최빈값, 근사값, 평균  (0) 2022.05.13
[파이썬 기초] 알고리즘 - 최대값, 최소값  (0) 2022.05.12
[파이썬 기초] 알고리즘 - 정렬  (0) 2022.05.06
[파이썬 기초] 알고리즘 - 검색,순위  (0) 2022.05.06
[파이썬 기초] 딕셔너리(Dictionary)  (0) 2022.05.04
    'Python/Python 기초' 카테고리의 다른 글
    • [파이썬 기초] 알고리즘 - 최빈값, 근사값, 평균
    • [파이썬 기초] 알고리즘 - 최대값, 최소값
    • [파이썬 기초] 알고리즘 - 정렬
    • [파이썬 기초] 알고리즘 - 검색,순위
    deda
    deda
    데이터 분석 / 파이썬 / UX / 정량리서치

    티스토리툴바