재귀함수

재귀함수는 자신을 호출하는 함수다. 반복동작을 짧게 구현할 수 있는 장점이 있지만 스택 사용량이 확 늘어나서 스택 오버플로우 문제 발생을 야기한다. 대부분 재귀는 루프로 대체 가능하기 때문에 루프로 대체하는 것이 좋다.

 

 

# 5! = 5*4*3*2*1

def fact1(num):
    if num == 1:     #끝나는 조건이 가장중요!
        return 1
    else:
        return num * fact1(num-1)

def fact2(num):
    res = 1
    for i in range(1,num+1):
        res *= i
    return res

def main():
    res = fact1(4)
    print('4!=', res)

    res = fact2(4)
    print('4!=', res)


main()

out)

 

 

Q. 피보나치수열 100항을 출력하라.

 

#재귀함수이용

def fibo1(num):
    if num <= 2:
        return 1
    else:
        return fibo1(num-1)+fibo1(num-2)
        
        
def main():
   
    for i in range(1, 101):
        print(fibo1(i))
#루프 이용해서
def fibo2(cnt):
    i, j, k = 1, 1, 0
    for x in range(1, cnt+1):
        if x<3:
            print(1, end='\t')
        else:
            k= i + j
            print(k, end='\t')
            i = j
            j = k
            
def main():

    fibo2(100)   
#리스트
def fibo3(cnt):
    res =[1,1]
    for i in range(2, cnt+1):
        res.append(res[i-1] + res[i-2])
    return res
    

def main():
    res = fibo3(100)    
    print(res)​

out)

모두 다 피보나치수열을 출력하지만 재귀함수는 출력하는 속도가 점차 느려진다.

그래서 재귀함수보다는 루프문으로 코드를 작성하는 것을 권장한다.

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #연습문제. 주소록 만들기  (1) 2021.06.08
phthon #입출력  (0) 2021.06.08
python #연습문제. Email등록과 찾기  (0) 2021.06.07
python #인자  (0) 2021.06.07
python #immutable과 mutable  (0) 2021.06.07

+ Recent posts