Computer Science/자료구조

[5.15] 05-2 재귀 알고리즘 분석

토마토. 2021. 5. 15. 12:38

재귀 알고리즘의 2가지 분석 방법

def recur(n:int) -> int:
    if n > 0:
        recur(n-1)
        print(n)
        recur(n-2)

x = int(input('정수를 입력하세요 : '))
recur(x)

genuinely 재귀 - 재귀 호출을 여러 번 실행하는 함수

하향식 분석 top down - 가장 위쪽의 함수 호출부터 계단식으로 조사

- recur(3) -> recur(1), recur(2) -> recur(1), recur(0) ->

상향식 분석 bottom up - 아래쪽부터 샇아 올리며 분석

- recur(0), recur(1), recur(2) - - - > 

재귀 알고리즘의 비재귀적 표현

꼬리 재귀를 제거하기

def recur(n:int) -> int:
    while n > 0:
        recur(n-1)
        print(n)
        n = n - 2

print(recur(3))

재귀를 제거하기

스택을 활용한다.

- 왜 안되는거지? 수정할 것  -> 왜 안되는지 모르겠다... ㅜㅜ

from class_making import Stack

def recur(n: int) -> int:
    s = Stack(n)
    
    while n >= 0:
        if n > 0:
            s.push(n)
            n = n - 1
            continue
        if not s.is_empty:
            n = s.pop()
            print(n)
            n = n -2
            continue
        break

x = int(input('정수는? : '))
recur(x)