영원히 흘러가는 강

백준 알고리즘 재귀 본문

알고리즘

백준 알고리즘 재귀

double_R_one_G 2020. 10. 8. 13:54
728x90

 

10872

팩토리얼!

 

import java.util.Scanner;

class main {
	public static void main(String[] args)  {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		int sum=fac(n);
		System.out.println(sum);
}

	public static int fac(int n) {
		if(n==1) {
			return 1;
		}
		else 
			return n*fac(n-1);
	}}

 

 

 

 

 

 

10870

피보나치 수 (n-2)+(n-1)로 이어짐

 

import java.util.Scanner;

class main {
	public static void main(String[] args)  {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		System.out.println(fibo(n));
		
}

	public static int fibo(int n) {
		if(n<=1) {
			return n;
		}
		else 
			return fibo(n-2)+fibo(n-1);
	}}

 

 

 

 

 

 

 

재귀 호출의 기본이지만 재귀는 항상 어려운듯하다...

점화식은 2^n-1

 

11729

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class main {

	public static StringBuilder sb = new StringBuilder();
	 
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int N = Integer.parseInt(br.readLine());
 
		sb.append((int) (Math.pow(2, N) - 1)).append('\n');
 
		Hanoi(N, 1, 2, 3);
		System.out.println(sb);
 
	}
 
	/*
		N : 원판의 개수 
		start : 출발지 
		mid : 옮기기 위해 이동해야 장소 
		to : 목적지
	 */
 
	public static void Hanoi(int N, int start, int mid, int to) {
		// 이동할 원반의 수가 1개라면?
		if (N == 1) {
			sb.append(start + " " + to + "\n");
			return;
		}
		// STEP 1 : N-1개를 A에서 B로 이동
		Hanoi(N - 1, start, to, mid);
		
		// STEP 2 : 1개를 A에서 C로 이동
		sb.append(start + " " + to + "\n");
		
		// STEP 3 : N-1개를 B에서 C로 이동
		Hanoi(N - 1, mid, start, to);
 
	}
}

 

bufferedreader 에 대한 거는 따로 게시.

 

 

728x90

'알고리즘' 카테고리의 다른 글

백준 알고리즘 스택  (0) 2020.10.14
백준 알고리즘 브루트 포스  (0) 2020.10.08
백준 알고리즘  (0) 2020.10.07
코드업 100제 (1096~1099)  (0) 2020.09.28
코드업 100제 (1091~1095)  (0) 2020.09.25
Comments