JAVA

[JAVA] 사용자 정의 함수, 반복 함수, 재귀 함수

멍정 2023. 9. 14. 00:38

멍하

돌아온 자바공부 3일차입니다.

9강 & 10강 사용자 정의 함수

https://youtu.be/YwSsMH8GX2A?si=RY4Os-BkDO-Hdihe

//사용자 정의 함수 선언 기본 형식
//반환형 함수명 매개변수

public static int function(int num)
{
	//본문
    return 정수형 리턴 값
}
public static void main(String[] args) {
	funtion(매개변수);
}

최대공약수 구하기

public class Main {
	
	public static int function(int a, int b, int c) {
		int min;
		if(a > b)
		{
			if(b > c)
			{
				min = c;
			}
			else
			{
				min = b;
			}
		}
		else
		{
			if(a > c)
			{
				min = c;
			}
			else
			{
				min = a;
			}
		}
		for(int i = min; i > 0; i--)
		{
			if(a % i == 0&& b % i == 0 && c % i == 0)
			{
				return i;
			}
		}
		return -1;
	}
	
	public static void main(String[] args) {

		System.out.println("400, 300, 750의 최대공약수 : " + function(400, 300, 750));

	}
}

약수 중 k번째 작은 수 찾기

public class Main {
	
	public static int function(int number, int k) {
		for(int i = 1; i <= number; i++)
		{
			if(number % i == 0)
			{
				k--;
				if(k == 0){
					return i;
				}
			}
		}
		return -1;
	}
	
	public static void main(String[] args) {

		int result = function(3050, 10);
		if(result == -1)
		{
			System.out.println("3050의 10번째 약수는 없습니다.");
		}
		else {
			{
				System.out.println("3050dml 10번째 약수는 "+ result + "입니다.");
			}
		}
	}
}

문자열에서 마지막 단어 반환하기

public class Main {
	public static char function(String input) {
		return input.charAt((input.length()-1));
	}
	
	public static void main(String[] args) {
		System.out.println("Hello World의 마지막 단어는 "+function("Hello World"));
    }
}

최대값을 출력하기

public class Main {

	public static int max(int a, int b) {
		return(a > b) ? a : b;
	}
	public static int function(int a, int b, int c) {
		int result = max(a, b);
		result = max(result, c);
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println("345, 567, 789 중에서 가장 큰 값은 "+function(345, 567, 789));
    }
}

11강 & 12강 반복함수와 재귀함수

https://youtu.be/Mga1rElzrVo?si=D9P6SAbl6QJzTdai 

- 반복 함수 : while 혹은 for을 사용하여 반복적으로 문제 해결

- 재귀 함수 : 함수에서 자신을 호출하여 재귀적으로 문제 해결 // 시간복잡도 유의

 

팩토리얼

//팩토리얼 반복

public class Main {

	public static int factorial(int number) {
		int sum = 1;
		for(int i = 2; i <= number; i++)
		{
			sum *= i;
		}
		return sum;
	
	}
	
	public static void main(String[] args) {
		System.out.println("10 팩토리얼은 "+factorial(10));
    }
}

//팩토리얼 재귀
public class Main {

	public static int factorial(int number) {
		if(number == 1)
			return 1;
		else {
			return number * factorial(number - 1);
		}
	
	}
	
	public static void main(String[] args) {
		System.out.println("10 팩토리얼은 "+factorial(10));
    }
}

피보나치 수열

//피보나치 수열 - 반복
public class Main {
	public static int fibonacci(int number) {
		int one = 1;
		int two = 1;
		int result = -1;
		if(number == 1)
		{
			return one;
		}
		else if(number == 2)
		{
			return two;
		}
		else {
			{
				for(int i = 2; i < number; i++)
				{
					result = one + two;
					one = two;
					two = result;
				}
			}
		}
		return result;
	}
	
	public static void main(String[] args) {
		System.out.println("피보나치 수열의 5번째 원소는 "+fibonacci(5));
    }
}

//피보나치 수열 - 재귀
public class Main {

	public static int fibonacci(int number) {
		if(number == 1)
		{
			return 1;
		}
		else if(number == 2)
		{
			return 1;
		}
		else {
				return fibonacci(number - 1) + fibonacci(number - 2);
		}
	}
	
	public static void main(String[] args) {
		System.out.println("피보나치 수열의 5번째 원소는 "+fibonacci(5));
    }
}

재귀를 사용할 경우에는 시간복잡도에 유의해야함!