def fact(n):
if n==1:
return 1
return n*fact(n-1)
num = int(input())
if num==0:
print(1)
else :
print(fact(num))
팩토리얼 함수를 재귀형태로 구현했다.
그리고 num==0일 경우도 처리해줬다.
def fibo(n):
if n<=1:
return n
return fibo(n-2)+fibo(n-1)
num = int(input())
print(fibo(num))
n이 1 이하일때 탈출조건만 고려해주면 된다 !
def HanoiTowerMove(num,_from,by,to):
#이동해야 할 원반의 수가 1개일 경우 재귀 탈출
if(num==1):
print(f"{_from} {to}")
else :
HanoiTowerMove(num-1,_from,to,by) #n-1개 옮기기
print(f"{_from} {to}")
HanoiTowerMove(num-1,by,_from,to)
num=int(input())
print(2**num-1) # 하노이탑 최소이동횟수 : 2^num - 1
HanoiTowerMove(num,1,2,3)
하노이 탑 최소이동횟수 공식인 Tn = 2^n -1를 알면 첫번째 출력결과는 쉽게 구할 수 있고
n개의 블럭이 1에 있다고 생각하면 제일 큰것을 제외한 n-1개의 블럭을 2로 옮기고 3에는 제일 큰 블럭을 옮기면 된다.
그러고 나머지를 3으로 옮기면된다.
이것을 재귀적으로 생각한게 위의 코드 이다.
def MakeStarList(n):
arr=[]
#num == 9일때 len(n) == 3
for i in range(3*len(n)):
if i//len(n)==1: #몫이 1일때
arr.append(n[i%len(n)]+" "*len(n)+n[i%len(n)])
else : # 몫이 다른 값일 경우 stars로 채움
arr.append(n[i%len(n)]*3)
return (list(arr))
stars=["***","* *","***"] #디폴트 패턴
num = int(input())
count = 0
while num != 3:
num = int(num/3)
count+=1 #제곱수 - 1 구하기
for _ in range(count):
stars = MakeStarList(stars)
for i in stars:
print(i)
후하..
뒤지는줄..!
규칙찾기 진짜 힘들었다
그런데 num이 3,9 그려본 결과
2차원 배열을 생각했을때 인덱스값과 3나눴을때 몫이 1인케이스가 비어있는 케이스 이므로 이 것을 반복한다고 생각하면서 리스트를 만들어준다고 생각하면된다.
그게 위에 코드이다....!