목록재귀 (4)
STUDY_SEONMIN
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. def hanoi(n, from_bar, to_bar, layover_bar): global move if n==1: move.append((from_bar,to_bar)) return hanoi(n-1, from_bar, layover_bar, to_bar) move.app..
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. *** * * *** N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다. 첫째 줄부터 N번째 줄까지 별을 출력하는 프로그램을 작성하세요. def draw_star(N): if N == 3: return ['***', '* *', '***'] stars = [] for..
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. def fibo(n): if n == 0 or n == 1: return n return fibo(n-1) + fibo(n-2) N = int(input()) print(fibo(N)) 재귀함수를 이용해 피보나치 수열을 구현하였..
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. def factorial(N): if N == 0: return 1 return N * factorial(N-1) N = int(input()) print(factorial(N)) 재귀함수는 함수 안에 자기자신을 또 호출하는 함수입니다. factorial(N)함수의 경우 재귀함수의 호출이 종료되는 지점인 0 까지의 계산이 다음과 같습니다. N * factorial(N-1) => N * N-1 * factorial(N-2) => ... => N * N-1 * N-2 * ... * 1 * factorial(0) => N * N-1 * N-2 * ... * 1 * 1