Post

Python 재귀함수 - 팩토리얼과 피보나치 수열

Python 재귀함수 - 팩토리얼과 피보나치 수열

Python 재귀함수 - 팩토리얼과 피보나치 수열

재귀(recursive)

  • 재귀 함수는 함수 내부에서 자기 자신을 호출하는 함수를 의미

팩토리얼

1
2
3
4
5
6
7
1! = 1   
2! = 1 * 2 ! = 1! * 2   
3! = 1 * 2 * 3 = 2! = 3   

fact(5)   
fact(fact(4) * 5 )   
fact(fact(fact(3) * 4 ) * 5 )
  • 반복문
    1
    2
    3
    4
    5
    6
    7
    8
    
    # 팩토리얼 (다시 풀어보기)
    def fact(n):
      result = 1
      while n > 1:
          result *= n # result = result * n
          n -= 1  # n = n - 1
      return result
    fact(5)
    
  • 재귀함수 ```python def factorial(n): if n <= 1: # n = 1일때의 의미 (0을 하게되면 계산한게 전체 0으 되기때문에 안됨) return 1 else: return factorial(n-1) * n # 10! = 9! * 10 = … = 1!

factorial(5)

1
2
3
4
5
6
7
8
9
10
### 피보나치 수열
``` python
F(n) = F(n-1) + F(n-2)
F(0) = F(1) = 1
F(2) = F(1) + F(0) = 1 + 1 = 2
F(3) = F(2) + F(1) = 2 + 1 = 3
F(4) = F(3) + F(2) = 3 + 2 = 5
F(5) = F(4) + F(3) = 5 + 3 = 8
F(6) = F(5) + F(4) = 8 + 5 = 13
  • 반복 ```python def fib_loop(n): result = [1,1] for i in range(1,n): end1 = result[-1] end2 = result[len(result)-2] fib_num = end1 + end2

    1
    
      result.append(fib_num)
    

    return result[-1]

fib_loop(100)

1
2
3
4
5
6
7
8
9
10
- 재귀
```python
#반복문과 다르게 오래걸림 (비효율적인 계산방식)
def fib_rec(n):
    if n == 0 or n == 1:
        return 1
    else:
        return fib_rec(n-1) + fib_rec(n-2)
fib_rec(100)
This post is licensed under CC BY 4.0 by the author.