[20210721] 재귀함수

해니·2021년 7월 21일
0

doota

목록 보기
2/2

1.재귀(Recursion)함수



1.재귀함수의 원리

  • 특정 함수 내에서 자기 자신을 다시 호출하여 실행되는 함수
  • 함수 내에서 자기 자신을 계속 호출하는 방식이기 때문에 반드시 종료 조건을 명시해야 함
  • 종료 조건을 명시하지 않으면 무한루프에 빠짐


2. 1부터 n까지 합 구하기

import java.util.Scanner;

public class Test {
	
	public static void main(String[] args) {
		
		
			// 사용자에게 n 입력받기
		
			// Scanner 객체 생성
			Scanner scan = new Scanner(System.in);
			System.out.print("양의 점수를 입력해 주세요.:");
			
			// intInt(): int형 파라미터 입력 
			int n = scan.nextInt();
			
			// 총 합
			int sum = SumFunction(n);
			System.out.print(" = "+sum);
	}
	
	
	public static int SumFunction(int n) {
		
		// 1부터 n까지 총 합 구하기
		// f(1) = 1
		// f(n) = n + f(n-1)
		
		// 종료조건 : n==1
		// n부터 1씩 감소하면서 숫자들을 합하고 1이 되는 순간 종료됨
		if(n==1) {
			System.out.print(n);
			return 1;
		}
		
		System.out.print(n+" + ");
		return n + SumFunction(n-1);
		
		
	}

}


3.구구단

package first;
import java.util.Scanner;

public class Gugudan {
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		System.out.print("숫자를 입력해 주세요.:");
		int num = scan.nextInt();
		
		System.out.println("구구단 프로그램을 실행합니다.");
		
		guGudan(num,1);
		
	}
	
	public static void guGudan(int num, int i) {
		
		// 곱하기 1부터 시작 
		
		// n * i 
		// printf: 서식이 있는 출력
		// %2d: 두 자리 정수, %3d:세 자리 정수
		// \n(new line):한 줄 띄움
		
		// 종료조건 
		//구구단이므로 1부터 9까지 
		// 9보다 커지면 종료 
		if(i>9) {
			return ;
		} else {
			System.out.printf("%2d * %2d = %3d\n",num,i,num*i);
			guGudan(num,i+1);
		}
	}
}



4. 팩토리얼(n!)


import java.util.Scanner;

public class Test3 {
	
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		
		System.out.print("한 자리 정수를 입력해주세요.:");
		int num = scan.nextInt();
		
		System.out.println("팩토리얼 계산 프로그램을 실행합니다.");
		long result = factorialFunction(num);
		System.out.printf("%d!=%6d",num,result);
	}
	
	public static long factorialFunction(int num) {
		
		// 결과값 
		long result = 0;
		
		// 종료 조건
		// 곱셈에서 1은 무의미함 (1*1=1)
		// 입력한 값(num)이 1보다 작거나 같으면 1을 리턴함 
		
		if(num<=1) {
			return 1;
		}
		
		result = num * factorialFunction(num-1);
		
		return result;
	}
}



5.피보나치 수열


import java.util.Scanner;

public class Test4 {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		System.out.print("숫자를 입력해주세요:");
		int num = scan.nextInt();
		System.out.println("피보나치 수 계산 프로그램을 실행합니다.");
		
		// 0부터 n까지 피보나치 수 모두 출력
		for(int i=0;i<=num;i++) {
			System.out.printf("%d\t",fiboFunction(i));
		}
	}
	
	public static int fiboFunction(int num) {
		
		// f(0) = 0
		// f(1) = 1
		// f(n) = f(n-1) + f(n-2) 
		
		// 0이나 1을 입력 받은 경우 동일한 값을 리턴함
		// 동일한 값을 리턴한다면 계산할 필요가 없으므로 종료 
		// 종료 조건: n==0, n==1
		if(num==0) {
			return 0;
		} else if(num==1){
			return 1;
		} else {
			return fiboFunction(num-1) + fiboFunction(num-2);
		}
		
	}
}

0개의 댓글