deffacto(n): # stack 할당 stack = [] # n부터 1까지 수행 while n > 0: # n부터 1까지 stack에 추가 stack.append(n) n -= 1 result = 1 # stack에 있는 것을 1부터 뽑아서 n까지 누적 곱 수행 (가장 마지막에 넣은 값부터 뽑기 때문에 stack처럼 작동한다) while stack: result *= stack.pop() return result
facto(5) : 120# 1*2*3*4*5
📌 파이썬 재귀의 한계
defrecur(n): print(n) if n == 2968: return"limit" if n == 2969: return"exceed" return recur(n+1)
classStack: def__init__(self): # 데이터 저장을 위한 리스트 준비 self.data = [] defpush(self, val): # 가장 마지막에 값 추가 self.data.append(val) defpop(self): try: # 데이터가 있으면 가장 마지막 값 읽기 return self.data.pop() except IndexError: # 데이터가 없으면 인덱스에러 발생 print("Stack is empty") def__len__(self): # len()로 호출하면 stack의 data 수 반환 return len(self.data) defisEmpty(self): # 스택이 현재 비어 있는지 확인 return self.__len__() == 0