본문 바로가기

개발자노트

함수) 재귀함수, 팩토리얼을 이용한 이해

package class04;

// [함수 심화] : 재귀

// 재귀함수(순환함수) : 주어였던게 목적어이기도 할때 ex) 팩토리얼

// 4!:4x3!=23  / N!=N*(N-1)! / f(n)=n*f(n-1)

// 만약 이해가 안된다면 함수 초반부분 복습하기

public class Test07 {

	static int fac(int n) {

		System.out.println(n);

		if (n == 1) {

			return 1;// 1*0이 아니라 그냥1임 , 종료조건

		}

		return n * fac(n - 1); // return에 포함되있는 fac(n-1)에 대한걸 모르니까 계속해서 n*fac(n-1)을 반복하다 보니 메모리 부족..

		// 재귀함수도 "종료조건"이 필요함!

	}

	public static void main(String[] args) {

		System.out.println(fac(4));

	}

}

종료조건을 설정하지 않았을 시 발생하는 에러

# Exception in thread "main" java.lang.StackOverflowError

무한 루프에 빠져 메모리 할당 가용범위를 넘어 발생하는 Exception이다.

재귀 메소드를 확인해서 종료 조건을 잘 입력했는지 확인을 안할 시 발생할 수 있다.