카테고리 없음

[10-7 파이썬] 계산기 만들기 2단계(재귀호출)

Olivia-BlackCherry 2022. 8. 19. 14:52

이번 시간에는 전에 만들었던 계산기 코드를 수정해서 

재귀호출 개념을 적용하여

기능이 업그레이드 된 계산기를 만들어보자.

오늘 할 부분은 4번, 5번이다.

 

이전의 계산기 만들기를 참고할 분은

아래의 게시글을 확인하면 된다.

https://olivia-blackcherry.tistory.com/86

 

[10-6 파이썬] 계산기 만들기 1단계(딕셔너리에 함수 넣기)

딕셔너리는 키와 벨류 값으로 이루어져있다. 벨류값으로, 함수를 넣을 수 있을까? 오늘은 딕셔너리 안에 함수를 넣는 방법을 생각해보자. 혹시 딕셔너리에 대한 기본기가 필요하신 분은 아래의

olivia-blackcherry.tistory.com

계산기 만들기
1. 계산하고자하는 숫자 입력 + (덧셈, 곱셈, 나눗셈, 뺄셈) 입력 + 두 번째 숫자 입력하기
2. 계산 계속 이어나갈지 묻기.
3. 계산 이어나가거나, 종료하기
4. 기존 계산을 이어나갈지, 기존의 계산을 지우고 새로 계산을 시작할지 결정하기
5. 계산하기

 

오늘 계산기를 만들기 위해 가장~~ 중요한 개념인

재귀호출을 알아보자. 

 

컴퓨터과학에서 '재귀'는 자신을 재참조하는 방법을 뜻한다.

쉽게 말해, 

자기 자신을 다시 불러온다는 뜻이다. 

 

아래의 함수를 보자. 

my_self() 함수 안에서 my_self()를 호출했다. 

즉, 재귀의 개념이다.

my_self()함수를 실행시키면 

처음에는 Good luck!^^ 가 출력된다. 

 

그리고 다시 첫 지점으로 돌아와,

my_self()함수가 실행되면서

두 번째 Good luck!^^ 가 출력된다. 

 

그리고 다시 첫 지점으로 돌아와,

my_self()함수가 실행되면서

세 번째 Good luck!^^ 가 출력된다. 

...

이렇게 무한 반복된다.

 

 

지금은 재귀호출의 개념을 보여주기 위해 코드를 이렇게 짰지만,

재귀호출 개념을 활용할 때는

이런 무한 루프의 늪에 빠지지 않도록 유의해야 한다. 

 

 

 

그럼 지금부터는

재귀호출 개념을 응용해 2단계 계산기를 마무리해보겠다.

 

아래의 코드에서 재귀호출이 된 곳을 찾아보자!!

def add(n1, n2):
  return n1 + n2

def subtract(n1, n2):
  return n1 - n2

def multiply(n1, n2):
  return n1 * n2

def divide(n1, n2):
  return n1 / n2

operations = {
    "+": add,
    "-": subtract,
    "*": multiply,
    "/": divide
}


def calculator():
  n1= int(input("계산하고자 하는 숫자를 입력하세요"))

  keep_going = True
  while keep_going:
    pick_operations = input(" +,-,*, / 골라주세요")
    n2 = int(input("계산하고자 하는 숫자를 입력하세요"))
    answer = operations[pick_operations](n1, n2)
    print(f"{n1} {pick_operations} {n2} = {answer}")
    
    cal_continue = input("계속 하시겠습니까? Y/N")
    if cal_continue != "Y" and cal_continue != "N":
      cal_continue= input("잘못 입력했습니다. 계속하시겠습니까 Y/N")
    if cal_continue == "Y":
      decision = input("기존 계산을 이어서 하겠습니까? Y, 새로운 계산을 하겠습니까? 엔터치기")
      if decision == "Y":
        n1 =  answer
      else: 
        keep_going = False
        calculator()
        

    elif cal_continue == "N":
      keep_going =False
          

calculator()

 

정답은!

끝에서 4번째에 

calculator()를 호출하는 부분이다.

 

2단계 계산기를 마무리하는 코드이다.

아래의 재생버튼 ▶을 눌러서 실행해보세요 

 

 

재귀호출에 대해 더 알고 싶은 분은

아래의 링크를 참고하기를 바란다.

https://ko.khanacademy.org/computing/computer-science/algorithms/recursive-algorithms/a/recursion

 

재귀란? (개념 이해하기) | 재귀 알고리즘 | Khan Academy

 

ko.khanacademy.org