본문 바로가기

개발일지/Java + Spring

[Java] 팩토리얼 + 피보나치 수열로 재귀함수 배우기

 

기초수학2 - factorial(!) 팩토리얼

팩토리얼 - 1부터 n까지의 곱이다. 5! , fact(5) = 5x4x3x2x1 = 120 그러면 0!의 답은 0? 그건 아니다. 정확히는 모르지만 수학에서 정한 규칙 때문에 0! = 1 1! = 1 이 둘 모두 답은 1이다.

choittolbok.tistory.com

팩토리얼에 대한 것은 이걸 참고 하면 좋다.

 

public class MainFunction_5 {
	public static int factorial(int f) {
		int sum = 1;
		for(int i=2; i<=f; i++) {
			sum *=i;
		}
		return sum;
	}
	public static void main(String[] args) {
		System.out.println("5! = " + factorial(5));
	}
}

for문을 이용한 함수는 이런 모양이다. 2부터 n번대까지 곱하면 끝

 

import java.util.Scanner;

public class FactiorialEx {
	
	public static int factorial(int f) {
		if(f == 0) {
			return 1;
		 }
		else {
			return f * factorial(f - 1);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("fac(?) : ");
		int f = sc.nextInt();
		System.out.println( f + "!의 값은 : " + factorial(f));
		sc.close();
	}

}

그런데 재귀함수를 이용하면 이런 모양이 된다. 본인을 불러내어 계산을 하는 방식인 재귀함수는 f*factorial(f-1) 이렇게 사용을 한다. 

 

실행을 하게 되면 이런 과정으로 처리를 하게 됨

 

1. if 조건 5>1 true -> 5*(4)

2. if 조건 4>1 true -> 5*4*(3)

3. if 조건 3>1 true -> 5*4*3*(2)

4. if 조건 5>1 true -> 5*4*3*2*(1)

5. if 조건 5>1 true -> 5*4*3*2*1

 

재귀함수는 자바 뿐만 아니라 다양한 언어에서 활용되는 함수로 코드를 좀 더 간결하게 하고, for문으로 표현하기 어려운 것들에서 도움이 되는데 큰 숫자를 처리 할 때 느리다는 단점이 있다고 합니다. 각자의 장단점이 있으니 알아두고 적재적소에 활용하면 될 듯.. 아직은 어디서 활용을 해야할지 나도 잘 모르겠다.